如何获取程序在使用 subprocess.call() 运行 时创建的日志文件?
How do I get the log file a program creates when running it with subprocess.call()?
我使用 Gaussian,这是一个用于分子几何优化的程序,以及其他应用程序。 Gaussian 可能需要几天时间才能结束单个优化,因此我决定在 Python 上编写一个程序,以便在它完成 运行ning 时向我发送电子邮件。我想通了的电子邮件发送。问题是 Gaussian 自动生成一个日志文件和一个 chk 文件,其中包含过程的实际结果,使用 subprocess.call(['command'], shell=False)
两个文件都不会生成。
我也试过用os.system(command)
解决问题,给了我.log文件和.chk文件,但是没等优化完成就发邮件了。
另一件重要的事情,我必须在后台 运行 整个过程,因为正如我在开始时所说,可能需要几天才能结束,而且我不能让终端打开那么久。
by using subprocess.call(['command'], shell=False)
both files are not generated.
表明您正在尝试 运行 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'])
注意:如果 g09
returns 具有非零退出代码(通常表示错误),check_call()
会引发异常。
我使用 Gaussian,这是一个用于分子几何优化的程序,以及其他应用程序。 Gaussian 可能需要几天时间才能结束单个优化,因此我决定在 Python 上编写一个程序,以便在它完成 运行ning 时向我发送电子邮件。我想通了的电子邮件发送。问题是 Gaussian 自动生成一个日志文件和一个 chk 文件,其中包含过程的实际结果,使用 subprocess.call(['command'], shell=False)
两个文件都不会生成。
我也试过用os.system(command)
解决问题,给了我.log文件和.chk文件,但是没等优化完成就发邮件了。
另一件重要的事情,我必须在后台 运行 整个过程,因为正如我在开始时所说,可能需要几天才能结束,而且我不能让终端打开那么久。
by using
subprocess.call(['command'], shell=False)
both files are not generated.
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'])
注意:如果 g09
returns 具有非零退出代码(通常表示错误),check_call()
会引发异常。