获取子进程中分叉进程的stdout/stderr

sam*_*rai 6 python fork subprocess stdout stderr

我有一个C程序调用 fork()

我有一个python脚本,用于执行C程序

child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE, bufsize=0)
Run Code Online (Sandbox Code Playgroud)

现在,我可以读取标准输出标准错误child.stderr.read(1)child.communicate()...但我的问题是,现在,我怎样才能得到只有从输出分叉过程.这甚至可能吗?我可以从原来的C程序和分支中获取pid 吗?

亲切的问候,非常感谢你:)

法比安

kdt*_*kdt 1

你所要求的将会很复杂,并且在纯Python中是不可能的——你需要一些特定于操作系统的机制。

你实际上要求两件事:

  • 根据父进程的 PID 识别分叉进程
  • 拦截任意进程的标准输入/输出

如果您在 Linux 上,您可能可以通过解析 /proc 来完成前者,后者实际上是一个类似调试器的功能(例如,进程如何拦截 Linux 上另一个进程的 stdout 和 stderr?

更有可能的是,您希望更改 C 程序的工作方式 - 例如,从 python 脚本而不是中间 C 代码执行 fork()/守护进程可以让您直接获取子进程。