[英]Get the stdout/stderr of a forked process in a subprocess
我有一個調用fork()
的C程序
我有一個python腳本,用於執行C程序
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE, bufsize=0)
現在我可以從輸出和錯誤與讀取child.stderr.read(1)
或child.communicate()
,...但我的問題是,現在,我怎樣才能僅從 叉過程的輸出。 這甚至可能嗎? 我可以從原來的C程序和分支中獲取pid嗎?
親切的問候,非常感謝你:)
法比安
你要求的是復雜的,並且在純python中是不可能的 - 你需要一些特定於操作系統的機制。
你真的要求兩件事:
你可以通過解析/ proc來做前者,如果你在Linux上,后者實際上是一個類似調試器的功能(例如, 一個進程如何攔截Linux上另一個進程的stdout和stderr? )
更有可能的是,您將需要更改C程序的工作方式 - 例如,從python腳本而不是中間C代碼執行fork()/ daemonization將允許您直接獲取子進程。
我認為當你在C中fork()一個進程時,你不能將任何描述符從子進程傳遞回父進程 - 但可能是我錯了。 只有你得到的是新子進程的PID。 最好的方法應該是打開一個管道(常規名稱,例如管道名稱包含進程的PID),然后你可以從任何地方打開它。
最后,當你fork()進程時,它會給你PID,你可以將PID(C二進制和分叉)寫入C程序的stdout,例如帶分隔符:
cpid = fork();
printf("%d|%d", (int)get_pid(), cpid);
祝好運 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.