通过shebang使用subprocess.call执行Python脚本

3 投票
2 回答
4259 浏览
提问于 2025-04-16 20:05

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

所以我举个例子,

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

如果spam是一个Python脚本,并且它的开头有指向python3的标记,并且有可执行权限,我会得到

OSError: [Errno 8] Exec format error

如果我

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

这样做就可以正常工作。

你知道这是为什么吗?我怎么能在不指定python3的情况下运行spam呢?

2 个回答

-2

试试看

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

你需要使用 shell=True,并且你的数组需要变成一个命令字符串,像这样:

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

这样做会调用一个命令行解释器,而不是直接执行命令,这样命令行解释器就能处理开头的特殊标记(shebang)。

撰写回答