簡體   English   中英

使用subprocess.call()運行程序時,如何獲取程序創建的日志文件?

[英]How do I get the log file a program creates when running it with subprocess.call()?

我使用Gaussian,這是一個用於分子幾何優化的程序,其中包括其他應用程序。 高斯可能需要幾天的時間才能結束一次優化,所以我決定在Python上編寫一個程序,以便在程序運行完畢后向我發送電子郵件。 我想通了電子郵件發送。 問題是高斯自動生成一個日志文件和一個chk文件,其中包含該過程的實際結果,並且通過使用subprocess.call(['command'], shell=False)不會生成這兩個文件。

我還嘗試使用os.system(command)解決該問題,它給了我.log文件和.chk文件,但是發送電子郵件時沒有等待優化完成。

另一個重要的事情是,我必須在后台運行整個過程,因為正如我在一開始所說的那樣,可能要花幾天的時間才能結束終端的打開。

通過使用subprocess.call(['command'], shell=False)不會生成兩個文件。

您的評論表明您正在嘗試運行subprocess.call(['g09 input.com &'], shell=False)

您的代碼應引發FileNotFoundError 如果您沒有看到它; 這表示stderr已隱藏。 您應該對其進行修復(確保可以看到sys.stderr.write('stderr\\n') )。 默認情況下, stderr不隱藏,即啟動父腳本的方式已損壞。 為了能夠斷開會話,請嘗試:

$ nohup python /path/to/your_script.py &>your_script.log &

或使用screentmux

shell=False (順便說一句,它是默認值,無需顯式傳遞它)應強烈暗示call()函數不希望使用shell命令。 實際上, subprocess.call()接受可執行文件及其參數作為列表,而不運行外殼程序:

subprocess.check_call(['g09', 'input.com', 'arg 2', 'etc'])

注意:如果g09返回非零退出代碼(通常指示錯誤),則check_call()會引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM