2015-01-05 20 views
0

我需要能夠每隔幾毫秒調用一次bash命令,並且我正在嘗試使用子進程來執行此操作。我目前使用:依次調用多個子進程

p = subprocess.Popen(command, universal_newlines=True, cwd=CurrentWorkingDirectory ,shell=True, stdout=subprocess.PIPE) 

並且有一個定時器在需要的時候觸發命令。

我的問題是,如果我通過使用subprocess.Popen調用這些命令,這是否會打開新的終端來運行每個命令?我想確保我不會遇到任何內存使用問題,因爲我將調用數千個這些命令。

什麼是最好的方式去做這件事?

+0

你有沒有真的用完這個內存? – user3684792

+0

你爲什麼要開新的終端? –

+0

我不能測試這個,但我會從每個命令運行一個驅動程序。我不確定是否每個後續的「subprocess.Popen」調用都會打開一個新的終端,因爲它在後臺運行...我想知道他們是否會堆積起來,或者有什麼事情,儘管最終適得其反,這個。 – TWagner

回答

0

無論你做什麼,都可能有比一分鐘內啓動一千個進程更好的選擇,無論你是否內存不足。

要按順序運行子進程,請使用subprocess.check_call而不是subprocess.Popen

這會打開新的終端來運行每個命令嗎?

不,除非命令本身啓動了新的終端。

+0

好的,謝謝你,我會嘗試check_call。雖然這會等待命令完成嗎?我需要程序繼續,而這些外部程序產生... – TWagner

+0

點擊鏈接。它導致文檔。使用專用線程產生子流程以避免阻塞程序的其餘部分 – jfs

0

若要回答有關終端開放的問題,除非底層的bash腳本明確啓動終端選項卡或其他內容,否則不會發生這種情況。至於你關於內存使用情況的問題,這完全取決於你所調用的底層腳本以及你是以順序還是併發方式進行操作。我想一點澄清可能會有所幫助!

+0

所以我只是運行一個驅動程序,需要通過終端使用[python3'程序'等等等等... ...]作爲命令...因此,它將連續調用「subprocess.Popen」幾乎17秒鐘,並且會持續幾分鐘。 因此,每60毫秒我的程序將使用subprocess.Popen(newCommand) – TWagner

+0

如果是這種情況,那麼它完全取決於您啓動的驅動程序進程的CPU和內存使用情況。 Python沒有自己的程序內存限制,所以如果這個氣球繼續使用,直到它耗盡你的系統的限制 – wilkesybear

+0

好吧,有沒有什麼辦法可以將連續的命令發送到同一個正在運行的終端窗口在後臺?或者一旦他們完成他們的程序,這些開放終端會退出嗎? – TWagner