0

我正在尝试从 python 脚本(wxpython GUI)调用当前的 PyMOL 会话,然后从 PyMOL 加载一些数据并向 PyMOL 发送一些命令。目前我可以在 python 脚本中打开一个新的 PyMOL 会话:

import sys, os
from wx import *
app = wx.App()
dialog = wx.FileDialog ( None, message = 'Set PyMOL directiry', style = wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
    # Pymol path
    moddir = dialog.GetDirectory()
    sys.path.insert(0, moddir)
    os.environ['PYMOL_PATH'] = moddir

    import pymol
    pymol.finish_launching()     
else:
    print 'Nothing was selected.'

from pymol import *   
dialog1 = wx.FileDialog ( None, message = 'Set PDB file', style = wx.OPEN)
if dialog1.ShowModal() == wx.ID_OK:
    pdbfile = dialog1.GetPath()
    cmd.load(pdbfile)
else:
    print 'Nothing was selected.'

dialog.Destroy()
app.MainLoop() 

但实际上我想检查我的 python 脚本是否已经打开了任何 PyMOL 会话。我在这里找到了与该主题相对应的讨论: 仅在 PyMOL 运行时调用函数 在此讨论之后,我尝试在 PyMOL 中调用“打印”函数:

try:
    from pymol import cmd
    print 'Connected'
except:
    <open new Pymol sesssion>

但我在 PyMOL cmd 中看不到任何文本。我试图在此语句之前确定 PyMOL 路径,但我又失败了。

有谁知道如何从 python 脚本调用当前的 PyMOL 会话?

4

1 回答 1

1

据我所知,没有办法从 Python 解释器与现有的 PyMOL 会话进行交互。有几种选择:

  1. 现有的 PyMOL 命令提示符接受有效的 Python,您可以直接从提示符运行任何脚本。也许您可以从那里执行您的脚本?

  2. 作为脚本的一部分,您可以启动一个新的 PyMOL 会话。PyMOL 的-i标志可能特别有用——它使您能够在无头环境中工作:

    -i     Disable the internal OpenGL GUI (object list, menus, etc.)
    
  3. 仔细看看 PyMOL 的__init.py__. 您会在那里发现 PyMOL 线程的复杂性。也许你能找到一些有用的东西来操纵?

边注:

print从您的脚本调用不会使文本出现在 PyMOL 会话中,它只会将文本写入标准输出(即它将打印到您的终端)。


以下 PyMOL wiki 页面可能对您有所帮助:

于 2013-03-11T19:13:18.837 回答