gpt4 book ai didi

python - 如何捕获 stdout/stderr 以外的子进程的输出?

转载 作者:行者123 更新时间:2023-11-28 16:47:13 25 4
gpt4 key购买 nike

我有一个程序,我想通过子进程启动。它可以输出到 fd 而不是 stdout 和 stderr。有没有办法从任意 fd 捕获数据?如果我的进程正在将输出发送到 fd 9,我想执行如下操作:

import subprocess, StringIO
redirector = StringIO.StringIO()
errno = subprocess.call(cmd, fd9=redirector)
#process the error code and data in redirector

想通过 stderr 或 stdout 将被调用进程的输出重定向到 fd 9。

最佳答案

如果程序在开始运行后打开文件描述符 9(或其他),则无法执行您想要的操作。

如果程序打开文件描述符 9 本身,而是从父进程获取它,那么你可以用 preexec_fn 参数做你想做的 subprocess.Popen,但这并不像为 StringIO 实例设置一些东西那么简单。您必须手动创建一个管道,并且必须及时安排从中读取数据,否则您导致死锁。预计要编写两三百行代码才能做到 100% 正确。我不打算在此处放置任何示例代码,因为我不想让它看起来比实际更简单。

除了subprocess.Popen , 你需要 os.pipe , os.dup2 , 和 os.read ,并且您需要了解底层系统原语: pipe(2) , dup2(2) , read(2) , fork(2) , 和 execve(2) .

现在可能是投资一份 Advanced Programming in the Unix Environment 的好时机.

关于python - 如何捕获 stdout/stderr 以外的子进程的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12589419/

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