我正在编写一个用Python编写的包装器脚本。包装器应该根据系统状态选择另一个Python脚本并执行它(使用绝对路径)。不需要返回父脚本。在
应该注意的是,我无法控制正在运行的脚本。它们可以使用__name__
检查、访问sys.argv
,而且它们的行为都应该与直接运行脚本的行为类似。在
现在,我正在使用os.execl()
:
import os, sys
# ...
os.execl(sys.executable, sys.executable, new_script, *sys.argv[1:])
但我至少可以算出三个问题:
python -v wrapper
在重新执行时不再是冗长的)sys.executable
是否有用,文档中说:
If Python is unable to retrieve the real path to its executable,
sys.executable
will be an empty string orNone
.
os.execl
调用来解决所有问题。到目前为止,我可以看出:
execfile()
可能可以工作,但它在Python3中被删除了,手工重新实现它是丑陋的(因为编码问题)。我不确定execfile()
还有什么其他含义imp.load_module()
可能可以工作,但它有点老套,在Python3.3中被弃用。它可能也会遇到Python3编码问题。在你建议我用哪种方法?在
编辑:我会忘记的。这个解决方案必须使用python2.5+、PyPy和jython2.5+。在
我只使用
execfile()
而不是imp.load_module()
。虽然控制权将回到执行脚本,但一个很大的优势是引用文档:这意味着脚本文件可以在任何地方,可以有任何(或没有)文件扩展名,并且在执行与模块导入相关的任务时不会浪费资源。在
这样做会自动完成或避免您想要的事情:
sys.executable
的值你试过这种方法吗?在
^{pr2}$结果:
相关问题 更多 >
编程相关推荐