py.user.next
Май 1, 2014 22:29:26
Сделал для третьего питона (для будущих поколений)
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. execIn all cases, if the optional parts are omitted, the code is executed in the current scope.
для второго питона
python.org. exec
Lexander
Май 1, 2014 23:28:32
А sandbox нынче не можно использовать или я отстал от жизни?
sanodin
Май 2, 2014 08:18:55
Lexander
А sandbox нынче не можно использовать или я отстал от жизни?
Можно, но устанавливать надо дополнительно, плюс под Windows еще надо собрать
BossBox
Май 2, 2014 13:39:26
А вот мы загрузили наш файл и выполнили, вопрос:
1. Он загружается один раз? (то есть загрузился выполнился и все будет выполнять постоянно когда потребуется, или будет загружать каждый раз при вызове)
2. Остановить его выполнение можно как? (нашего загружено скрипта)
sanodin
Май 2, 2014 13:56:33
1. загружаться будет каждый раз, ваше условие(не сохранять файл)
2. остановить можно, по условию
BossBox
Май 2, 2014 14:33:55
Нет вы наверно не поняли, запустился наш скрипт он обратился к серверу и вызвал от туда скрипт (выполнил), команды для повторного то вызова нет, только при вызове нашего скрипта на машине повторно, он наверно загрузит, или я ошибаюсь?
sanodin
Май 2, 2014 16:05:25
все верно, вы запускаете программу, она обращается к серверу, считывает\подгружает код, выполняет его и….либо работает дальше по, одному вам ведомому, заданию и в процессе снова выполняет загруженный с сервера код в любое время без его повторной закачки либо заканчивает свою работу
BossBox
Май 3, 2014 00:16:07
Спасибо всем, очень помогло, выручили!
BossBox
Май 3, 2014 11:33:21
Вопрос, если скрипт вызывается из C:\\Home\Dir, при выполнении:
urllib.URLopener().retrieve('http://185.20.000.000/', 'server.pyc')
Он загрузит его в директорию выше, а сразу можно указать чтобы он загрузил в под папку:
C:\\Home\Dir\
mods\scriptИ когда он загрузится, чтобы заменил уже существующий там файл
sanodin
Май 3, 2014 13:19:20
Да конечно, только вы же не собирались его сохранять
urllib.URLopener().retrieve('http://185.20.000.000/', 'C:\Home\Dir\mods\script\server.pyc')
потом и работать с ним из этой директории надо
кстати, вы экспериментируйте, половина вопросов отпадет сама собой