Уведомления

Группа в Telegram: @pythonsu

#1 Май 1, 2014 22:29:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Сделал для третьего питона (для будущих поколений)

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



Отредактировано py.user.next (Май 1, 2014 22:38:02)

Офлайн

#2 Май 1, 2014 23:28:32

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

А sandbox нынче не можно использовать или я отстал от жизни?



Офлайн

#3 Май 2, 2014 08:18:55

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Lexander
А sandbox нынче не можно использовать или я отстал от жизни?
Можно, но устанавливать надо дополнительно, плюс под Windows еще надо собрать

Офлайн

#4 Май 2, 2014 13:39:26

BossBox
Зарегистрирован: 2014-02-23
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

А вот мы загрузили наш файл и выполнили, вопрос:

1. Он загружается один раз? (то есть загрузился выполнился и все будет выполнять постоянно когда потребуется, или будет загружать каждый раз при вызове)
2. Остановить его выполнение можно как? (нашего загружено скрипта)

Офлайн

#5 Май 2, 2014 13:56:33

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

1. загружаться будет каждый раз, ваше условие(не сохранять файл)
2. остановить можно, по условию

Отредактировано sanodin (Май 2, 2014 14:08:26)

Офлайн

#6 Май 2, 2014 14:33:55

BossBox
Зарегистрирован: 2014-02-23
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Нет вы наверно не поняли, запустился наш скрипт он обратился к серверу и вызвал от туда скрипт (выполнил), команды для повторного то вызова нет, только при вызове нашего скрипта на машине повторно, он наверно загрузит, или я ошибаюсь?

Офлайн

#7 Май 2, 2014 16:05:25

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

все верно, вы запускаете программу, она обращается к серверу, считывает\подгружает код, выполняет его и….либо работает дальше по, одному вам ведомому, заданию и в процессе снова выполняет загруженный с сервера код в любое время без его повторной закачки либо заканчивает свою работу

Отредактировано sanodin (Май 2, 2014 16:07:06)

Офлайн

#8 Май 3, 2014 00:16:07

BossBox
Зарегистрирован: 2014-02-23
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Спасибо всем, очень помогло, выручили!

Офлайн

#9 Май 3, 2014 11:33:21

BossBox
Зарегистрирован: 2014-02-23
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Вопрос, если скрипт вызывается из C:\\Home\Dir, при выполнении:

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

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

C:\\Home\Dir\mods\script

И когда он загрузится, чтобы заменил уже существующий там файл

Отредактировано BossBox (Май 3, 2014 12:04:42)

Офлайн

#10 Май 3, 2014 13:19:20

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подгрузить другой скрипт с сервера и выполнить внутри

Да конечно, только вы же не собирались его сохранять

urllib.URLopener().retrieve('http://185.20.000.000/', 'C:\Home\Dir\mods\script\server.pyc')
потом и работать с ним из этой директории надо
кстати, вы экспериментируйте, половина вопросов отпадет сама собой

Отредактировано sanodin (Май 3, 2014 13:25:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version