【发布时间】:2018-05-17 17:34:18
【问题描述】:
我正在使用 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 的列表形式,它可以工作。
我不确定这是否是一个错误。
【问题讨论】:
-
如果
stdin连接到 TTY,CPython 将进入交互模式。 Popen 的默认设置是继承默认的 io 句柄,它将第二个解释器也连接到您的 TTY。尝试传递stdin=None。 -
@user2722968 我无法在 Python 3.6.5rc1 中看到这种行为。如果我从终端(其中 stdin 是 tty)运行
python3 test.py arg1,它会运行脚本而不会掉入交互式 shell。
标签: python shell subprocess interpreter