3

我正在用 Python 3 编写一个(有点)模块化应用程序,我想从中运行任意程序,所说的程序是在运行时指定的,不一定是 python 脚本。

所以我用例如,

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

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

OSError: [Errno 8] Exec format error

如果我

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

它工作正常。

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

4

2 回答 2

8

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

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

这将调用 shell 而不是直接命令,并且 shell 应该能够处理 shebang。

于 2011-06-22T14:29:19.277 回答
-2

尝试

subprocess.call(['spam.py', "-i", eggs, "-o", ham])
于 2011-06-22T14:26:09.250 回答