使用shebang使用subprocess.call执行python脚本

时间:2011-06-22 14:23:55

标签: python python-3.x subprocess shebang

我在Python 3中编写(某种程度上)模块化应用程序,我想从中运行任意程序,所述程序在运行时指定,不一定是python脚本。

所以我用,例如,

subprocess.call([spam, "-i", eggs, "-o", ham])

如果spam是一个python脚本,shebang到python3和可执行权限,我得

OSError: [Errno 8] Exec format error

如果我

subprocess.call(["python3", spam, "-i", eggs, "-o", ham])

它工作正常。

你知道为什么吗?如何在未指定spam的情况下运行python3

2 个答案:

答案 0 :(得分:8)

您需要使用shell=True,并且需要将您的数组转换为命令字符串,如下所示:

subprocess.call(' '.join([spam, "-i", eggs, "-o", ham]), shell=True)

这将调用shell而不是direct命令,shell应该能够处理shebang。

答案 1 :(得分:-1)

尝试

subprocess.call(['spam.py', "-i", eggs, "-o", ham])