首页 > 解决方案 > 用python控制外部程序

问题描述

对于我的学习,我需要处理大量数据。数据需要通过一个名为 VMD 的程序进行分析,并最终存储在 Excel 表中。我的目标是自动化整个过程,而不是复制粘贴所有不同的文件。

我是 python 的完整初学者,并且在开始编写自己的程序时。我设法用 python 脚本打开了 VMD:

import subprocess

result = subprocess.run(['C:Program Files (x86)\\University of Illinois\\VMD\\vmd.exe', "-c", "C:\\Users\\MrTemper\\Documents\\HiWi\\Trajektorien\\Traj_2_5_to_10ps_IFR_MD_298K_1.pdb"], shell=True)

但现在我希望程序将 .pdb 文件加载到 VMD 程序中。如果我运行程序会发生错误:“系统找不到给定的路径”。

我该如何解决这个问题?用 python 脚本控制 GUI VMD 程序的一般方法是什么?

也可以用德语回答。谢谢。

标签: pythonautomationexternal-processvmd

解决方案


我遇到了同样的问题并创建了一个小程序来帮助我运行 vmd。

当以 flag 开头时,VMD 接受脚本 -e <script>。所以我们可以使用它来传递我们需要它做的例程。

这意味着我们将不得不在 tcl 中编程并使用 python 将我们的脚本加载到 vmd 中。然后 vmd 可以运行我们的分析并给出输出。

在我的情况下,我创建了 tcl 脚本的垃圾,并根据我的问题用 python 动态加载它们,以创建一个分析脚本并将其作为 arg 传递。像这样的东西:

script = prepare_tcl_script() # create script
script_file = save_script(script) # save it to a tcl file
cmd = ['vmd', '-e', script_file]
subprocess.Popen(cmd)

因此,在您的情况下,您需要创建一个 tcl 脚本,在其中传递您希望 vmd 分析的所有信息,包括 pdb 文件。然后你可以用python调用它。

或者,如果您不想创建脚本,您可以将信息作为标准输入传递给 vmd。这是我的解决方案:

vmd_process = subprocess.Popen('vmd', stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
grep_stdout = vmd_process.communicate(input=b'puts "Hi!"')

然后你甚至可以用grep_stdout.decode().

无论哪种方式,您都不会逃避在 tcl 中的编程,但可以将其视为您简历中的另一个语言 :)


推荐阅读