【发布时间】:2012-12-30 08:00:59
【问题描述】:
我想做以下事情:
- 使用
subprocess.check_call从 Python 中转到另一个可执行文件 - 捕获子进程的stderr,如果有的话
- 将 stderr 输出添加到父进程的 CalledProcessError 异常输出中。
理论上这很简单。 check_call 函数签名包含 stderr 的 kwarg:
subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
但是,紧接着documentation 包含以下警告:
注意:请勿在此功能中使用
stdout=PIPE或stderr=PIPE。由于当前进程没有读取管道,如果子进程生成足够的输出到管道以填满操作系统管道缓冲区,则子进程可能会阻塞。
问题是,我能找到的几乎每个从子进程获取 stderr 的示例都提到使用 subprocess.PIPE 来捕获该输出。
如何在不使用subprocess.PIPE 的情况下从子进程中捕获stderr?
【问题讨论】:
-
使用 subprocess.Popen 代替。
标签: python subprocess stderr