2010-03-06 78 views
4

我想从另一个脚本中运行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 

回答

8

可以使用__import__功能,让您导入动态模块:

module = __import__(sys.argv[1]) 

(您可能需要删除尾随.py或不指定它的命令行)

从Python文档:

直接使用__import__()是罕见的,除非你想导入一个名为只在运行时才知道。

+0

thanks greg。如果python文件位于脚本之外的其他目录中,可以显示如何执行此操作,可以获得额外的分数 – Mike 2010-03-06 02:21:38

+2

@Mike:当然,修改'sys.path',可能是这样的:'sys.path.append(“/ your/module/directory“)' – 2010-03-06 02:29:22

1

虽然__import__肯定执行指定的文件,它也将它存储在python模块列表中。如果你想重新执行相同的文件,你必须重新加载。

你也可以看看python exec声明,它可能更适合你的需求。

从Python文档:

此语句支持Python代码的动态执行。第一个表达式应该评估为字符串,打开的文件对象或代码对象。

+0

Python 3:['exec'](https://docs.python.org/3/library/functions.html#exec) – WillC 2017-04-06 02:32:15