【问题标题】:Best way to call a python script from within a python script multiple times从 python 脚本中多次调用 python 脚本的最佳方法
【发布时间】:2012-08-23 02:24:50
【问题描述】:

我需要在另一个 python 脚本中使用不同的参数多次执行一个 python 脚本。 我知道这听起来很可怕,但这是有原因的。 然而问题是被调用者脚本检查它是否被导入或执行(如果 __name__ == '__main__': ...)。

  1. 我知道我可以使用 subprocess.popen("python.exe callee.py -arg") 但这似乎比它应该的要慢得多,我猜那是因为 Python.exe 正在启动和终止多次.
  2. 我无法将脚本作为模块定期导入,因为它的设计如开头所述 - 导入时它将在没有 args 的情况下执行,因为它缺少 main() 方法。
  3. 我也无法更改被调用者脚本
  4. 据我了解,我也不能使用 execfile(),因为它不接受参数

【问题讨论】:

  • 可以修改“callee-script”吗?
  • 用适当的包装器替换脚本,它具有相同的功能,但从原始脚本调用方法或类。

标签: python import subprocess popen


【解决方案1】:

为您找到了解决方案。你可以在 python 中重新加载一个模块,你可以修补 sys.argv。

想象 echo.py 是你想要多次调用的被调用脚本:

#!/usr/bin/env python
# file: echo.py

import sys
print sys.argv

你可以做你的调用者脚本:

#!/usr/bin/env python
# file: test.py 
import sys
sys.argv[1] = 'test1'
import echo
sys.argv[1] = 'test2'
reload(echo)

并调用它,例如:python test.py place_holder

它会打印出来:

['test.py', 'test1']
['test.py', 'test2']

【讨论】:

  • 注意这是在 python 2.7 上,对于 python 3 使用模块 imp 和 imp.reload
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多