【发布时间】:2023-03-08 17:53:01
【问题描述】:
我有一个文件通过 Popen() 运行另一个文件。
# a.py
import subprocess
p = subprocess.Popen(['python3','/home/scotty/b.py'],
stderr=subprocess.PIPE)
p.wait()
# b.py
input('???')
当我运行 a.py "???"没有出现,但提示仍然有效......为什么?我该如何解决?
如果我删除 stderr=subprocess.PIPE 然后“???”确实出现了。
根据文档,输入的输出“写入标准输出”,我没有触及标准输出。
【问题讨论】:
-
在
Popen之后,您应该调用p.communicate()。请参阅this page,它几乎涵盖了子流程模块的所有基本用例。 -
@gribouillis 老实说,我不使用communicate() 的原因是因为我希望即使按下ctrl-c 也能够捕获stderr。通过通信,我无法在键盘中断后收到它的返回值。 (我也没有使用 wait(),仅用于示例)
-
如果您不使用
communicate()或wait(),您的程序如何等待p 完成?我想要一个 mvce... -
@gribouillis 我正在尝试直接从 p.stderr 使用 select.select 和 rad
标签: python python-3.x subprocess stdout popen