我使用Gaussian,这是一个分子几何优化程序,以及其他应用程序。高斯可能需要几天才能结束单个优化,因此我决定在Python上创建一个程序,以便在完成运行时向我发送电子邮件。发消息的电子邮件我发现了。问题是Gaussian会自动生成一个日志文件和一个chk文件,其中包含该过程的实际结果,并且使用Camera
不会生成这两个文件。
我还尝试使用subprocess.call(['command'], shell=False)
来解决问题,它为我提供.log文件和.chk文件,但是无需等待优化完成即可发送电子邮件。
另一件重要的事情,我必须在后台运行整个过程,因为正如我在开始时说的那样,可能需要数天才能结束,而且我不能让终端打开那么久。
答案 0 :(得分:0)
使用
subprocess.call(['command'], shell=False)
不会生成这两个文件。
Your comment表示您正在尝试运行错误的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()
接受一个可执行文件及其参数作为列表而不是它运行shell:
subprocess.check_call(['g09', 'input.com', 'arg 2', 'etc'])
注意:check_call()
如果g09
返回非零退出代码(通常表示错误),则会引发异常。