我想做以下事情:
- 从 Python 中输出到另一个可执行文件,使用
subprocess.check_call
- 捕获子进程的stderr,如果有的话
- 将 stderr 输出添加到父进程的 CalledProcessError 异常输出中。
理论上这很简单。check_call
函数签名包含一个kwarg stderr
:
subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
但是,紧随其后的文档包含以下警告:
注意:不要使用
stdout=PIPE
或stderr=PIPE
与此功能。由于当前进程中没有读取管道,因此如果子进程向管道生成足够的输出以填满 OS 管道缓冲区,则子进程可能会阻塞。
问题是,我能找到的几乎每个从子进程中获取 stderr 的示例都提到了使用subprocess.PIPE
来捕获该输出。
如何在不使用的情况下从子进程中捕获 stderr subprocess.PIPE
?