python - 用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 程序的一般方法是什么?
也可以用德语回答。谢谢。
解决方案
我遇到了同样的问题并创建了一个小程序来帮助我运行 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 中的编程,但可以将其视为您简历中的另一个语言 :)
推荐阅读
- ios - 是否支持使用 .p8 密钥进行 Ad Hoc 部署的 Apple 推送通知
- java - 用简单的英语,我如何使用图书馆?
- c# - 如何在 Lambda C# 项目中初始化 AWS XRay
- linux - 如何在 CentOS 8 中允许一个用户访问 atd 服务并拒绝另一个用户?
- swift - 如何在代码中找到 UIView 的创建位置 - swift - 以编程方式
- r - R随机分配到有条件的组
- python - 将数字转换为元组和内存错误
- python - 如何检索索引中的前两个值?
- perl - 如何忽略 perl 子例程上的 exit(1) - 尝试 eval 但没有用
- chef-infra - Chef Cookbook Recipe 操作以同意最终用户许可协议并自动执行安装过程