2012-08-22 114 views
0

我想從程序X中打開一個程序Y,然後繼續使用程序X,但是,似乎一旦Y被使用命令行調用,它就會開始跳過下一個任務代碼,同時還響應按鍵。popen發送命令到

所以問題是,如何讓X完成代碼。

我使用:

proc=subprocess.Popen([cmd], shell=True) 
proc.communicate() 

以及:

os.system([cmd]) 

其中cmd是用於與參數的終端的命令。

我是runnin Linux。

+0

我很困惑:首先你說Y被X調用(即編程),然後你提到從命令行調用它。你真的是指「X」嗎? –

回答

0

這兩種方法(Popen + communicate()os.system)是同步,因此直到子完成的父進程塊的執行。

如果你想讓兩個進程同時運行,你必須想出一個不同的方式來收集孩子的輸出。

幾個想法:

  1. 移動在父進程中的線程裏面的代碼(見threading

  2. 去掉proc.communicate()並收集以不同的方式對孩子產量比stdout pipes。請參閱multiprocessing模塊以獲取更多建議。或者,如果你覺得自己很勇敢,那麼看看ZeroMQ(可能是矯枉過正,介意你,我只是覺得它是一個很棒的溝通庫)。

+0

嘿,我只是認爲我應該只使用2.4編譯器版本,考慮到這一點,你認爲你提到的這些方法仍然有效嗎? –

+0

哇! 2.4版真的已經過時(差不多4年)。 'multiprocessing'模塊是在2.6中引入的。至於ZeroMQ我不知道,但我不認爲它真的適合你的情況。 'threading'模塊可能是你最好的選擇。 –