[英]How can I keep my program running when I use subprocess.call() to switch user?
[英]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 &
或使用screen
, tmux
。
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.