【发布时间】:2019-02-05 07:49:53
【问题描述】:
尊敬的 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.run和shell = True。 -
“如果通过 shell=True 显式调用 shell,应用程序有责任确保正确引用所有空格和元字符以避免 shell 注入漏洞”来自docs.python.org/3/library/…
-
是
output_file文件的路径(我认为这行不通)或类似文件的对象(就像您使用open(output_file, 'w')方法得到的一样? -
到目前为止我还没有让它工作,所以我愿意接受任何解决方案。
标签: python subprocess