![](/img/trans.png)
[英]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.