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() 

しかし、実際には、PyMOL セッションが既に開かれているかどうかを python scrip で確認したいと思います。ここでこのトピックに対応する議論を見つけました: Only call function if PyMOL running この議論に続いて、PyMOL で「print」関数を呼び出そうとしました:

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セッションに表示されません。テキストは標準出力に書き込まれるだけです(つまり、端末に出力されます)。


次のPyMOLwikiページが役立つ場合があります。

于 2013-03-11T19:13:18.837 に答える