子进程无法在非交互模式下运行 Python 可执行文件?



我正在使用python 3.6.3和subprocess模块来运行另一个python脚本

#  main.py
#!/bin/env python
from subprocess import Popen,PIPE
from sys import executable
p = Popen([executable, 'test.py', 'arg1'],shell=True, stdout=PIPE)
p.wait()
print(p.stdout.read().decode())

#  test.py
import sys
print(sys.argv)

我希望它会运行并执行test.py.但是,它会在交互模式下打开一个 python 解释器!

我测试了shell=False选项,它有效。我测试了字符串形式而不是args的列表形式,它有效。

我不确定这是否是一个错误。

您需要删除shell=True或将第一个参数更改为executable + ' test.py arg1'而不是[executable, 'test.py', 'arg1']

如文档中所述,使用shell = True,它将以/bin/sh -c python test.py arg1运行它,这意味着python将在没有参数的情况下运行。

最新更新