我在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
?
答案 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])