Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2010 17:02:14

py2010
От:
Зарегистрирован: 2010-08-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение python кода в python скрипте из переменной или файла.

В общем подскажите как сделать сабж?
Цель такая: скрипт выполняет какой-то алгоритм. в определенный момент приходит команда на смену алгоритма.
скрипт должен изменить текст алгоритма (например из файла) и запустить его на выполнение.

поможет ли здесь import?



Отредактировано (Авг. 6, 2010 20:00:52)

Офлайн

#2 Авг. 6, 2010 17:53:44

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Выполнение python кода в python скрипте из переменной или файла.

s = '''print 'go'
x = 9
print x**0.5
'''
exec s
но лучше прочитайте книжку о питоне



Отредактировано (Авг. 6, 2010 17:55:06)

Офлайн

#3 Авг. 11, 2010 21:53:10

PoshtarBoba
От:
Зарегистрирован: 2009-10-22
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение python кода в python скрипте из переменной или файла.

О, у меня похожий вопрос, с областями видимости при исполнении кода из строки.

test.py:
s='bla-bla'
e='print s'
from modul import Run
Run(e)
modul.py:
def Run(e): exec(e)
последняя команда Теста передаёт управление в модуль, а модуль уже не видит переменной s. Как правильно сделать?

Делаю ф-ции менюшек для своего модуля. Если скрипт запущен с аргументами - действия выполняются автоматически (напр. скачка ссылки или списка ссылок в файле). Если аргументов нету - выводится менюшка с вариантами действий:

test.py:
menu_argv=[
['-u','print "from url:",CpArg(2)'],
['-l','print "from file:",CpArg(2)'],
['','MenuRun(menu_main)']]

menu_main=[
['1','1. First command','print "menu 1"'],
['2','2. Second command','print "menu 2"'],
['','','print "no variants of menu"']]

from mymodul import MenuCp, MenuRun, CpArg

MenuCp(menu_argv)
mymodul.py:
import sys

def CpArg(x): # возвращает аргумент х командной строки или '', если аргумента нет
if len(sys.argv)<=x: return ''
else: return sys.argv[x]

def MenuRun(items): # пользовательское меню
l=len(items)-1
a=xrange(l)
for i in a: print(items[i][1])
print('select variant:'),
v=raw_input()
for i in a:
if items[i][0]==v: l=i
exec items[l][2]

def MenuCp(items): # меню аргументов CommandPrompt (потом объединю с верхним)
l=len(items)-1
a=xrange(l)
for i in a:
if items[i][0]==CpArg(1): l=i
exec items[l][1]



Отредактировано (Авг. 11, 2010 22:06:26)

Офлайн

#4 Авг. 12, 2010 00:25:24

PoshtarBoba
От:
Зарегистрирован: 2009-10-22
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение python кода в python скрипте из переменной или файла.

Уже в кровати такая идея пришла в голову. Не запускать на выполнение текстовый кусок кода в модуле, а возвращать его текстом в… main (кстати, а как в питоне называется основной, запускной блок?)

test.py:
s='bla-bla'
e='print s'
from modul import Run
exec Run(e)
modul.py:
def Run(e): return е
(это только принцип, не обращайте внимания, что Run ничего не делает)



Отредактировано (Авг. 12, 2010 00:26:06)

Офлайн

#5 Авг. 12, 2010 00:43:56

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Выполнение python кода в python скрипте из переменной или файла.

А кто мешает s передать вторым параметром?



Офлайн

#6 Авг. 16, 2010 12:19:55

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Выполнение python кода в python скрипте из переменной или файла.

Там:

def run(code, **local_ns):
local_ns = local_ns.copy() # что бы изменения не вернулись, просто так
exec(code, None, local_ns)
Сям:
run('print s', s = 'bla-bla')
p.s. И читаем PEP8, ещё раз такое форматирование кода увижу – убью :-).

..bw



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version