在维护命名空间和传递args的同时,Python执行脚本的最佳方法是什么

时间:2014-08-05 16:10:51

标签: python namespaces exec subprocess

我正在寻找一种在我的代码中执行另一个python脚本的方法。

我需要维护对调用脚本变量的访问以及传递新脚本参数。

从我目前所看到的情况来看,似乎: exec()可以维护命名空间,但不能接收参数(或至少以一种简单的方式) subprocess()可以传递参数,但不能维护命名空间,因为它会创建一个新进程。

这些功能中是否有解决方法?可能设置argv变量然后将env传递给exec()或以某种方式维护subprocess()的命名空间

2 个答案:

答案 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__':块保护,您应该没问题。