我有一个python脚本,它有一个方法,它接受一个包含另一个python脚本的字符串。我想执行该脚本,调用其中的函数,然后在主脚本中使用该函数的结果。目前,它看起来是这样的:假设从python执行复杂的python脚本
def executePythonScript(self, script, param):
print 'Executing script'
try:
code = compile(script, '<string>', 'exec')
exec code
response = process(param)
except Exception as ex:
print ex
print 'Response: ' + response
return response
“过程”功能在被编译并执行运行时的脚本存在。
该解决方案非常适用于非常简单的脚本,如:
def process():
return "Hello"
...但我有没有运气越来越复杂的脚本来执行。举例来说,如果我的脚本使用JSON包,我得到:
global name 'json' is not defined
另外,如果我的处理功能是指在相同脚本的功能,我会得到一个错误,有作为:
def process():
return generateResponse()
def generateResponse():
return "Hello"
...给我一个错误:
global name 'generateResponse' is not defined
这是命名空间的一个问题?怎么json(这是一个标准的python包)没有被识别?任何意见,将不胜感激!
这听起来像是一个非常糟糕的主意......并且几乎100%肯定有更好的方法来处理你正在尝试做的任何事......为什么不仅仅是从'my_script导入过程'? –
您能否提供您正在尝试执行的脚本的完整示例?这可能只是一个缺少的进口声明。 – pelya
感谢您的建议。我最终将代码字符串转储到临时文件中 - 虽然不理想,但它似乎工作得很好。我不能使用“从myscript导入过程”,因为我只知道运行时的文件名,但我已经为导入文件运行时的解决方案添加了注释。 –