我正在使用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
的列表形式,它有效。
我不确定这是不是一个错误。
答案 0 :(得分:2)
您需要删除shell=True
或将第一个参数更改为executable + ' test.py arg1'
而不是[executable, 'test.py', 'arg1']
。
正如the documentation中所解释的那样shell = True
,它会将其作为/bin/sh -c python test.py arg1
运行,这意味着python
将在没有参数的情况下运行。