我想從程序X中打開一個程序Y,然後繼續使用程序X,但是,似乎一旦Y被使用命令行調用,它就會開始跳過下一個任務代碼,同時還響應按鍵。popen發送命令到
所以問題是,如何讓X完成代碼。
我使用:
proc=subprocess.Popen([cmd], shell=True)
proc.communicate()
以及:
os.system([cmd])
其中cmd是用於與參數的終端的命令。
我是runnin Linux。
我想從程序X中打開一個程序Y,然後繼續使用程序X,但是,似乎一旦Y被使用命令行調用,它就會開始跳過下一個任務代碼,同時還響應按鍵。popen發送命令到
所以問題是,如何讓X完成代碼。
我使用:
proc=subprocess.Popen([cmd], shell=True)
proc.communicate()
以及:
os.system([cmd])
其中cmd是用於與參數的終端的命令。
我是runnin Linux。
這兩種方法(Popen
+ communicate()
和os.system
)是同步,因此直到子完成的父進程塊的執行。
如果你想讓兩個進程同時運行,你必須想出一個不同的方式來收集孩子的輸出。
幾個想法:
移動在父進程中的線程裏面的代碼(見threading)
去掉proc.communicate()
並收集以不同的方式對孩子產量比stdout pipes。請參閱multiprocessing模塊以獲取更多建議。或者,如果你覺得自己很勇敢,那麼看看ZeroMQ(可能是矯枉過正,介意你,我只是覺得它是一個很棒的溝通庫)。
嘿,我只是認爲我應該只使用2.4編譯器版本,考慮到這一點,你認爲你提到的這些方法仍然有效嗎? –
哇! 2.4版真的已經過時(差不多4年)。 'multiprocessing'模塊是在2.6中引入的。至於ZeroMQ我不知道,但我不認爲它真的適合你的情況。 'threading'模塊可能是你最好的選擇。 –
我很困惑:首先你說Y被X調用(即編程),然後你提到從命令行調用它。你真的是指「X」嗎? –