2010-06-21 36 views
2

終止我有一些代碼在後臺在python確定過程已成功

import subprocess 
process = subprocess.Popen('find/> tmp.txt &',shell=True) 

我需要捕捉的場景,我都知道,過程完成成功完成 執行UNIX shell命令。

請示例代碼解釋

Tazim

+0

只需再次注意'shell = True'也是不必要的,因爲您傳遞的命令是一個字符串,並且必須生成一個shell來評估它。 – 2010-06-21 14:09:48

回答

2

請勿使用shell = True。這對你的健康有害。

proc = subprocess.Popen(['find', '/'], stdout=open('tmp.txt', 'w')) 
if proc.wait() == 0: 
    pass 

如果你真的需要一個文件,使用import tempfile而不是硬編碼的臨時文件名。如果您不需要該文件,請使用管道(請參閱托馬斯建議的子流程文檔)。

另外,不要在Python中編寫shell腳本。改用os.walk函數。

3

沒有必要爲&:該命令是在一個單獨的進程中啓動,而獨立運行。

如果要等到進程終止,使用wait()

process = subprocess.Popen('find/> tmp.txt', shell = True) 
exitcode = process.wait() 
if exitcode == 0: 
    # successful completion 
else: 
    # error happened 

如果你的程序可以做一些事情在此期間有意義,您可以使用poll()來確定過程已經完成。

此外,不是將輸出寫入臨時文件,然後從Python程序中讀取,您可以直接從管道中讀取數據。詳細信息請參見subprocess documentation