2010-04-21 50 views
0

我打算從python調用一個C/C++程序Popen,python代碼應該觀察子進程的行爲併爲他自己的工作收集一些數據。從python/child進程調用另一個進程需要訪問shell

問題是C代碼已經使用管道調用某些shell命令 - 所以在我從python執行後,C程序無法執行bash shell命令。

有沒有辦法從Popen調用來指定,子進程應該在shell中執行他自己的pipe命令?

我試着用shell = True,但沒有幫助!

+0

你是什麼意思的「觀察」嗎?如果子進程正在使用其stdout與另一個子進程交談,它不能用它與父進程交談。也許它使用stderr。請提供更多信息。 – 2010-04-21 13:59:22

+0

好吧, 孩子(c代碼)開發了,並且已經使用stdout與超級進程(shell)進行通信。現在Python應該調用child,收集他在stderr上寫的東西,但是爲了執行一些shell命令,child仍然需要能夠與現在的super-superprocess(shell)進行交流! – dexter 2010-04-21 14:08:23

+0

我只有一個模糊的想法,你正在嘗試做什麼。我懷疑當你說C程序將它的stdout發送到shell時,你實際上意味着它將被打印到屏幕上。我也懷疑你是在爭取許多處理管道的API不允許你同時在同一個程序中進出(popen)。我不知道Python API看起來是什麼樣的,但是這是有原因的,並且有很多方法可以通過使用低級函數在C中解決它。嘗試在命令行輸入「man pipe」 – nategoose 2010-04-21 16:24:28

回答

0

最好的方法可能是使用TCP連接到本地主機。如果您使用* nix,您可以通過打開一個臨時文件並從主機應用程序中輪詢它來做到這一點。

2

從你的描述來看,你似乎在使用Popen來執行一個命令行,它有Popen調用一個shell。

而應該有POPEN直接調用你的程序,就像這樣:

from subprocess import Popen,PIPE 
p = Popen(['/my/fancy/program','-myarg1','-myarg2'],stdout=PIPE) 
from_process = p.communicate()[1] 
相關問題