Найти - Пользователи
Полная версия: Подгрузить другой скрипт с сервера и выполнить внутри
Начало » Python для новичков » Подгрузить другой скрипт с сервера и выполнить внутри
1 2 3 4 5 6 7
py.user.next
Сделал для третьего питона (для будущих поколений)

t2.py
#!/usr/bin/env python3
 
import marshal
import urllib.request
 
def decode(data):
    return marshal.loads(data[12:])
 
def main():
    fname = 't1.pyc'
    url = 'http://localhost/{}'.format(fname)
    with urllib.request.urlopen(url) as data:
        code = decode(data.read())
    exec(code, globals())
 
if __name__ == '__main__':
    main()

t1.py
#!/usr/bin/env python3
 
import os
 
def f():
    print('test', os.getcwd())
 
f()

из t1.py сделал t1.pyc и положил на сервере

[guest@localhost v3]$ ./t2.py
test /home/guest/tmp/tests/py/t/v3
[guest@localhost v3]$

там, оказывается, особенность exec
python.org. exec
In all cases, if the optional parts are omitted, the code is executed in the current scope.

для второго питона
python.org. exec
Lexander
А sandbox нынче не можно использовать или я отстал от жизни?
sanodin
Lexander
А sandbox нынче не можно использовать или я отстал от жизни?
Можно, но устанавливать надо дополнительно, плюс под Windows еще надо собрать
BossBox
А вот мы загрузили наш файл и выполнили, вопрос:

1. Он загружается один раз? (то есть загрузился выполнился и все будет выполнять постоянно когда потребуется, или будет загружать каждый раз при вызове)
2. Остановить его выполнение можно как? (нашего загружено скрипта)
sanodin
1. загружаться будет каждый раз, ваше условие(не сохранять файл)
2. остановить можно, по условию
BossBox
Нет вы наверно не поняли, запустился наш скрипт он обратился к серверу и вызвал от туда скрипт (выполнил), команды для повторного то вызова нет, только при вызове нашего скрипта на машине повторно, он наверно загрузит, или я ошибаюсь?
sanodin
все верно, вы запускаете программу, она обращается к серверу, считывает\подгружает код, выполняет его и….либо работает дальше по, одному вам ведомому, заданию и в процессе снова выполняет загруженный с сервера код в любое время без его повторной закачки либо заканчивает свою работу
BossBox
Спасибо всем, очень помогло, выручили!
BossBox
Вопрос, если скрипт вызывается из C:\\Home\Dir, при выполнении:

urllib.URLopener().retrieve('http://185.20.000.000/', 'server.pyc')

Он загрузит его в директорию выше, а сразу можно указать чтобы он загрузил в под папку:

C:\\Home\Dir\mods\script

И когда он загрузится, чтобы заменил уже существующий там файл
sanodin
Да конечно, только вы же не собирались его сохранять
urllib.URLopener().retrieve('http://185.20.000.000/', 'C:\Home\Dir\mods\script\server.pyc')
потом и работать с ним из этой директории надо
кстати, вы экспериментируйте, половина вопросов отпадет сама собой
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB