Python,动态调用脚本

5 投票
2 回答
4785 浏览
提问于 2025-04-15 20:04

我想在一个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__() 的情况很少,通常是在你想导入一个在运行时才知道名字的模块时。

撰写回答