python - 通过子进程在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
解决方案
为什么不简单:
subprocess.Popen(f'orca {input_file} >& {output_file}',
shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
更多信息: 运行进程,不要等待
推荐阅读
- javascript - ASP 不读取所有代码文本
- file - 逐行读取 clojure 文件后,如何从特定行获取特定字符串?
- excel - Excel使用基于一个单元格的另一张表中的信息填充相应的单元格
- powershell - 如何将字符串操作为多个整数?
- php - 使用 jQuery POST 插入数据库
- android - 给出错误未连接适配器;跳过布局
- java - 来自 Firebase 的 ConcurrentModificationException
- android - TableRow 值中的 EditText 混淆了
- javascript - 节点 - 没有数据创建的 ES 索引
- apache - 更改的文档根在 xampp 中不起作用