【问题标题】:Controlling external program with python用python控制外部程序
【发布时间】:2020-12-06 16:17:43
【问题描述】:

为了我的学习,我需要处理大量数据。数据需要通过名为 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程序的一般方法是什么?

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

【问题讨论】:

    标签: python automation external-process vmd


    【解决方案1】:

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

    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 编程,但可以将其视为您简历中的另一个语言 :)

    【讨论】:

    • 如果您愿意,可以查看the program I wrote 以帮助指导您。并随时提出更多问题。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多