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

2024-09-29 00:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,我想通过子进程启动。它可以输出到除stdout和stderr之外的fd。有没有一种方法可以从任意fd中捕获数据?如果我的进程正在向fd9发送输出,我想做如下操作:

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

我不想通过stderr或stdout将被调用进程的输出重定向到fd9。在


Tags: 数据方法import程序cmd进程stderrstdout
1条回答
网友
1楼 · 发布于 2024-09-29 00:23:14

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

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

除了^{},还需要^{}^{}、和{a4},并且需要了解底层系统原语: ^{}^{}^{}^{},和{a9}。在

现在可能是投资购买Advanced Programming in the Unix Environment副本的好时机。在

相关问题 更多 >