gpt4 book ai didi

python - 在 subprocess.check_call 中捕获 stderr 而不使用 subprocess.PIPE

转载 作者:行者123 更新时间:2023-11-30 23:38:51 28 4
gpt4 key购买 nike

我想执行以下操作:

  • 使用 subprocess.check_call 从 Python 外壳到另一个可执行文件
  • 捕获子进程的 stderr(如果有)
  • 将 stderr 输出添加到父进程的 CalledProcessError 异常输出中。

理论上这很简单。 check_call 函数签名包含一个 stderr 的 kwarg:

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

但是,紧接着 documentation包含以下警告:

Note: Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.

问题是,我能找到的从子进程获取 stderr 的几乎每个示例都提到使用 subprocess.PIPE 来捕获该输出。

如何在不使用 subprocess.PIPE 的情况下从子进程捕获 stderr?

最佳答案

stdoutstderr 可以分配给几乎任何可以接收数据的东西,比如文件句柄。您甚至可以提供一个打开的 file_handle 来写入 stdoutstderr:

file_handle = open('some_file', 'w')

subprocess.check_call(args, *, stdin=None, stdout=file_handle, stderr=file_handle, shell=False)

现在每一行输出都会进入同一个文件,或者您可以为每行输出一个不同的文件。

stdin 也像文件句柄一样读取,使用 next() 将每一行读取为除了初始 args 之外要发送的输入命令.

它的功能非常强大。

关于python - 在 subprocess.check_call 中捕获 stderr 而不使用 subprocess.PIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com