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

поможет ли здесь import?
sp3
s = '''print 'go'
x = 9
print x**0.5
'''
exec s
но лучше прочитайте книжку о питоне
PoshtarBoba
О, у меня похожий вопрос, с областями видимости при исполнении кода из строки.

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]
PoshtarBoba
Уже в кровати такая идея пришла в голову. Не запускать на выполнение текстовый кусок кода в модуле, а возвращать его текстом в… main (кстати, а как в питоне называется основной, запускной блок?)

test.py:
s='bla-bla'
e='print s'
from modul import Run
exec Run(e)
modul.py:
def Run(e): return е
(это только принцип, не обращайте внимания, что Run ничего не делает)
Ed
А кто мешает s передать вторым параметром?
bw
Там:
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
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