2015-12-12 136 views
2

我正在運行我自己的腳本來啓動HandBrakeCLI。 HandBrake需要幾個小時來完成它的工作。Python,從運行命令獲取狀態

我打算從cron啓動此腳本,所以會出現從腳本沒有真正的輸出(我可以隨時更新文件時間。)

手剎能告訴我它是什麼在底部做終端在運行時的線路。

我正在使用Popen來啓動手剎。

我怎樣才能看到手剎的輸出,而它正在運行以收集它在真實(接近真實)時間的狀態?

這裏是我使用的命令:

command = ['HandBrakeCLI', '-i', long_source, '-o', long_target, '-f', 'mp4'] # + a bunch more 
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate() 
print out 
print err 

這工作,但我想從Popen輸出執行過程中,不能等到它完成之後。

謝謝,馬克。

PS。 Ubuntu服務器12.04

+0

你嘗試過什麼?在我看來,'subprocess.Popen'完全是正確的方法,所以沒有看到錯誤信息,我不知道爲什麼你不能這樣做。 – jez

+0

這裏是我正在使用的命令:'p = subprocess.Popen(['HandBrakeCLI','-i',long_source,'-o',long_target,'-f','mp4'..一堆更多],標準輸出= subprocess.PIPE,標準錯誤= subprocess.PIPE)' \t \t'出來,ERR = p.communicate()' \t \t'打印out' \t \t'打印err' –

+0

這工作,但我想從輸出Popen ** **執行期間,不要等到完成後。格式在這個評論部分不起作用。 –

回答

0

您可以將cron的輸出指向某個文件並引用該文件。

-1

相反的.communicate()您可以使用Popen()剛剛啓動子,此後定期行來檢查其stdoutstderr行:

sp = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

# later.... 
while continueMyEventLoop: 
    out = sp.stdout.readline() 
    err = sp.stderr.readline() 

    DealWith(out, err) 
    DoOtherStuff()