子進程命令的實時輸出我使用python腳本作為流體力學(xué)代碼的驅(qū)動程序。當(dāng)需要運行模擬時,我使用subprocess.Popen若要運行代碼,請將stdout和stderr的輸出收集到subprocess.PIPE-然后我可以打印(并保存到日志文件)輸出信息,并檢查任何錯誤。問題是,我不知道代碼是如何進行的。如果我直接從命令行運行它,它會給出關(guān)于迭代時間、下一次步驟的輸出,等等。是否有一種方法既可以存儲輸出(用于日志記錄和錯誤檢查),也可以生成實時流輸出?我代碼的相關(guān)部分:ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )output,
errors = ret_val.communicate()log_file.write(output)print outputif( ret_val.returncode ):
print "RUN failed\n\n%s\n\n" % (errors)
success = Falseif( errors ): log_file.write("\n\n%s\n\n" % errors)最初我是在run_command貫通tee這樣,一個副本直接進入日志文件,流仍然直接輸出到終端-但是這樣我就不能存儲任何錯誤(根據(jù)我的知識)。編輯:臨時解決辦法:ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True )while not ret_val.poll():
log_file.flush()然后,在另一個終端運行tail -f log.txt(第二節(jié))log_file = 'log.txt').
3 回答

忽然笑
TA貢獻1806條經(jīng)驗 獲得超5個贊
import subprocessimport sys process = subprocess.Popen(your_command, stdout=subprocess.PIPE)for line in process.stdout: sys.stdout.write(line)
添加回答
舉報
0/150
提交
取消