This is a read-only mirror of pymolwiki.org
Difference between revisions of "Python Integration"
m (2 revisions) |
|
(No difference)
|
Revision as of 03:08, 28 March 2014
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