我有一个程序,我想通过子进程启动。它可以输出到除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。在
如果程序在开始运行后打开文件描述符9(或其他任何文件),则无法执行您想要的操作。在
如果程序本身不打开文件描述符9,而是从父进程获取它,那么您可以使用
preexec_fn
参数对subprocess.Popen
执行任何操作,但这并不像设置StringIO
实例那么简单。您必须手动创建一个管道,并且必须安排从中及时读取,否则会导致死锁。希望写两到三百行代码才能100%正确。我不打算在这里放任何示例代码,因为我不想让它看起来比实际更简单。在除了^{} ,还需要^{} 、^{} 、和{a4},并且需要了解底层系统原语:
^{} ,^{} ,^{} ,^{} ,和{a9}。在
现在可能是投资购买Advanced Programming in the Unix Environment副本的好时机。在
相关问题 更多 >
编程相关推荐