为什么 python 生成的 pymol (pml) 脚本在 PyMoL 中不正确 运行?

Why does a pymol (pml) script generated by python not run correctly in PyMoL?

我写了一个 python 脚本,它获取上游结果并将其输出为 pml 脚本(一系列 PyMoL 命令)。我在pymol文件运行的时候,有些命令运行,但是命令行returns 'Invalid selection' Selector-Errors.

比如。脚本 returns 文本行如:

fetch 3MPF
create 3MPFB63,3MPF and c. B and i. 63-68
remove 3MPF
align 3MPFB63, ref

当脚本在 PyMoL 中为 运行 时,它表示:

PyMOL>fetch 3MPF
 please wait ...
PyMOL>create 3MPFB63,3MPF and c. B and i. 63-68
Selector-Error: Invalid selection name "3MPF".
( 3MPF and c. B and i. 63-68 )<--
PyMOL>remove 3MPF
Selector-Error: Invalid selection name "3MPF".
( 3MPF )<--
PyMOL>align 3MPFB63, ref
Selector-Error: Invalid selection name "3MPFB63".
3MPFB63<--

但是,当错误中的这些命令是单独 运行 时,即复制和粘贴代码段 create 3MPFB63,3MPF and c. B and i. 63-68 时,命令 运行 非常好,可以进行选择并创建对象.

如有任何帮助,我们将不胜感激。

似乎这个问题的答案是在 fetch 调用中包含 async=0,强制命令行在执行第二个命令之前等待来自该命令的 return,即它是试图 select 对象存在之前。

例如,

fetch 3MPF, async=0
create 3MPFB63,3MPF and c. B and i. 63-68
delete 3MPF
align 3MPFB63, ref

这现在可以正常工作了。 post 如果在完整的 PML 自动 运行.

时出现其他问题,将返回 post

经典,"as soon as you resort to asking on SO you figure it out,"情况。