Only call function if PyMOL running

百般思念 提交于 2019-12-08 05:40:05

问题


I have a script that performs some calculations on a protein. When it's finished, a method imports the pymol module, and uses the pymol.cmd API to display results in a PyMOL session. The process is something akin to the following:

def display_results(results, protein_fn):
    import pymol
    pymol.cmd.load(protein_fn)
    pymol.cmd.alter(...)
    ...

protein_fn = "1abc.ent"
results = analyze_protein(protein_fn)
display_results(results, protein_fn)

However, my script doesn't necessarily need to display the results in PyMOL, and I'd like this to only be done if PyMOL is installed and running.

It's easy to check if PyMOL is installed (I can just try: import pymol), but is there a way to check if there's an active PyMOL session to display results in?


回答1:


I'm not an expert on PyMOL (haven't ever scripted it) but I see 2 possible ways:

  1. Do something trivial that requires an open PyMOL session and catch exceptions
  2. Look at process names (something like os.system("ps ux | grep -i pymol"))

First way is better, second is a dirty hack.




回答2:


I usually just do something like:

try:
    import pymol
    pymol_imported = True
except:
    pymol_imported = False

Then

if pymol_imported:
    display_results(...)

I don't know if that's Python "best practices", but PyMol scripts are usually just quick, one-off things in most cases, anyways.



来源:https://stackoverflow.com/questions/11858681/only-call-function-if-pymol-running

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!