О, у меня похожий вопрос, с областями видимости при исполнении кода из строки.
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]