Python Integration

From PyMOLWiki
Jump to navigation Jump to search

Launching Python programs from PyMOL

Running a Python script from PyMOL, usually the command:

run script.py

Is enough. Of course, the file script.py needs to be in the working directory. You can also launch Python scripts when starting PyMOL. Asynchronous means, that a new Python thread is started:

pymol example.py     # synchronous, in PyMOL module
pymol -r example.py  # synchronous in __main__ module
pymol -l example.py  # asychronous in a new module

You can also launch python programs from within PyMOL with the commands:

run example.py        # synchronous in pymol module
run example.py,main   # synchronous in __main__ module

spawn example.py        # asychronous in a new module
spawn example.py,global # asychronous in the PyMOL module
spawn example.py,main   # asychronous in the __main__ module

Launching PyMOL from Python programs

Running PyMOL from a Python script requires two commands:

import pymol
pymol.finish_launching()

If using a single script to produce multiple figures, then the reinitialize() command is necessary between parts of the script. This can be made to run silently (without launching the PyMOL GUI) by using the __main__ commands. It is sometimes also necessary to put in a small delay (sleep) in order to allow PyMOL to finish processing the prior step. An example script might be:

import __main__
__main__.pymol_argv = ['pymol','-qc'] # Pymol: quiet and no GUI
from time import sleep
import pymol
pymol.finish_launching()

for index in [1,2,3]:
    pymol.cmd.reinitialize()
    # Desired pymol commands here to produce and save figures
    sleep(0.5) # (in seconds)

Using the PyMOL commandline

Are you aware that the PyMOL command line is also a Python command line? You can just use PyMOL interactively in that fashion.

PyMOL>print 1+1
2
PyMOL>from random import random
PyMOL>print random()
0.739460642143

The only major difference is that the default namespace for PyMOL is "pymol" not "__main__"

PyMOL>print __name__
pymol