首页 > 解决方案 > 通过子进程在python中启动后台进程并将输出写入文件

问题描述

亲爱的 stackoverflow 用户,

我正在寻找一个可能非常简单的问题的解决方案。我想自动化一些量子化学计算并遇到了一个小问题。

通常,您使用远程服务器上的输入文件 (*.inp) 作为后台进程启动量子化学程序(在我的情况下称为 orca),然后通过管道将输出通过管道传输到输出文件 (*.out)

nohup orca H2.inp >& H2.out &

或类似的东西。

现在我想使用 python 脚本(带有一些模板)来自动编写输入文件。最后,脚本应该以一种我可以在不停止 orca 的情况下注销服务器的方式开始计算。我试过了

subprocess.run(["orca", input_file], stdout=output_file)

但到目前为止它没有用。如何使用子进程模块“模拟”顶部给出的命令?

问候

更新 我有一个名为H2.xyz. 该脚本按点读取和拆分文件名,并创建一个输入文件名H2.inp,输出应写入该文件H2.out

更新 2 输入文件是通过 *xyz 文件派生而来的

xyzfile = str(sys.argv[1])
input_file = xyzfile.split(".")[0] + ".inp"
output_file = xyzfile.split(".")[0] + ".out"

并通过模板在脚本中创建。最后我想通过以下方式运行脚本:

python3 script.py H2_0_1.xyz

标签: pythonsubprocess

解决方案


为什么不简单:

subprocess.Popen(f'orca {input_file} >& {output_file}',
                 shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

更多信息: 运行进程,不要等待


推荐阅读