2016-09-26 108 views
0

我有一個守護進程運行的命令,獲取和執行它:Python:子進程Popen需要加入嗎?

subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

我從來沒有對它做任何事之後,沒有wait(),沒有communicate()

是好一些呢?
或正在加入所需的過程?

有沒有類似的東西threading.deamon=Truesubprocess.Popen

回答

0

既然你設置stdout=subprocess.PIPE, stderr=subprocess.PIPE,如果你想獲得標準輸出,你可以這樣做:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
for line in p.stdout: 
    # do something here 
    #... 

至於你說的cmd被作爲守護程序執行,我覺得守護進程不應在運行這條路。由於一旦你的python進程出錯,守護進程將退出,你的數據將丟失。

如果你通過subprocess.Popen()運行其他進程,比如mysql,linux comands等,那麼可以這麼做。但你應該知道過程狀態(返回代碼),你應該通過調用poll()wait()來檢查過程的狀態。有關更多信息,請參見docs of subproces.Popen

+0

我不希望stdout和不關心返回的代碼,因爲執行的命令會照顧到這一點。我只是想知道它是否需要等待()或流程失效? – ealeon

+0

@ealeon,如果你不關心輸出或返回代碼,在調用Popen之後,cmd將在後端運行,不需要調用wait(),如果存在,則進程不會失效沒有發生任何其他錯誤。 –