subprocess无法在非交互模式下运行python可执行文件?

时间:2018-05-17 17:34:18

标签: python shell subprocess interpreter

我正在使用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的列表形式,它有效。

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

1 个答案:

答案 0 :(得分:2)

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

正如the documentation中所解释的那样shell = True,它会将其作为/bin/sh -c python test.py arg1运行,这意味着python将在没有参数的情况下运行。