通过shebang使用subprocess.call执行Python脚本
我正在用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)。