Python,动态调用脚本
我想在一个Python脚本中运行另一个Python脚本。这里的“在内部”是指子脚本的任何状态变化都会影响到父脚本的状态。也就是说,如果在子脚本中设置了一个变量,父脚本中的这个变量也会被改变。
通常你可以这样做:
import module
但问题在于,这里要运行的子脚本是作为父脚本的一个参数传入的,我觉得你不能用变量来进行导入。
类似这样的:
$python run.py child.py
这就是我期待的结果:
#run.py
#insert magic to run argv[1]
print a
#child.py
a = 1
$python run.py child.py
1
2 个回答
3
虽然 __import__
确实会执行你指定的文件,但它还会把这个文件存储在 Python 的模块列表中。如果你想重新执行同一个文件,就需要使用重新加载的方式。
你也可以看看 Python 的 exec
语句,这个可能更符合你的需求。
根据 Python 的文档:
这个语句支持动态执行 Python 代码。第一个表达式应该是一个字符串、一个打开的文件对象,或者一个代码对象。
9
你可以使用 __import__
这个函数,它可以让你动态地导入一个模块:
module = __import__(sys.argv[1])
(你可能需要去掉最后的 .py
,或者在命令行中不指定它。)
来自Python文档的说明:
直接使用
__import__()
的情况很少,通常是在你想导入一个在运行时才知道名字的模块时。