我正在寻找一种在我的代码中执行另一个python脚本的方法。
我需要维护对调用脚本变量的访问以及传递新脚本参数。
从我目前所看到的情况来看,似乎: exec()可以维护命名空间,但不能接收参数(或至少以一种简单的方式) subprocess()可以传递参数,但不能维护命名空间,因为它会创建一个新进程。
这些功能中是否有解决方法?可能设置argv变量然后将env传递给exec()或以某种方式维护subprocess()的命名空间
答案 0 :(得分:1)
是的,您可以更改sys.argv
并将命名空间传递到exec
import sys
script_path = "otherscript.py"
old_argv, sys.argv = sys.argv,[script_path, "arg1", "arg2"]
namespace = dict(globals())
if globals() is not locals():
namespace.update(locals())
with open(script_path, 'r') as infile:
exec(compile(infile.read(), script_path, 'exec'), namespace)
sys.argv = old_argv
使用exec
是否是一个好主意是另一个故事,一如既往,但这就是你如何做到的。根据您的具体情况,您可能会更改处理全局和本地的方式。 (实际上,明确地将所需的值放入namespace
)
答案 1 :(得分:0)
使用imp
。例如:
import imp
module_name = imp.load_source('module_name', '/path/to/module_name.py')
您现在可以使用导入的模块。只要脚本受if __name__ == '__main__':
块保护,您应该没问题。