This is a read-only mirror of pymolwiki.org
Difference between revisions of "Launching From a Script"
m (1 revision) |
(recommended way to run scripts) |
||
Line 1: | Line 1: | ||
− | + | <div style="background-color: #ccc; padding: 20px"> | |
+ | The recommended way to run PyMOL-Python scripts is by using PyMOL as the interpreter. This is supported by all versions of PyMOL, including the pre-compiled bundles provided by Schrödinger. | ||
+ | |||
+ | Example from a shell: | ||
+ | |||
+ | shell> pymol -cq script.py | ||
+ | |||
+ | Example from a running PyMOL instance: | ||
+ | |||
+ | PyMOL> run script.py | ||
+ | |||
+ | </div> | ||
+ | |||
+ | For advanced users, Open-Source PyMOL (as well as the Schrödinger-provided "[http://pymol.org/download Mac alternative X11-only build]") also allows to run PyMOL from an existing Python process. After importing the '''pymol''' module, PyMOL's event loop has to be started with a call to '''pymol.finish_launching()'''. | ||
== Example 1 == | == Example 1 == | ||
Line 49: | Line 62: | ||
pymol.finish_launching() | pymol.finish_launching() | ||
cmd = pymol.cmd | cmd = pymol.cmd | ||
+ | </source> | ||
+ | |||
+ | == STDOUT == | ||
+ | |||
+ | PyMOL captures '''sys.stdout''' and '''sys.stderr''', to control it with it's own [[feedback]] mechanism. To prevent that, save and restore both streams, e.g.: | ||
+ | |||
+ | <source lang="python"> | ||
+ | import sys | ||
+ | stdout = sys.stdout | ||
+ | stderr = sys.stderr | ||
+ | pymol.finish_launching(['pymol', '-xiq']) | ||
+ | sys.stdout = stdout | ||
+ | sys.stderr = stderr | ||
</source> | </source> | ||
Revision as of 23:34, 21 January 2016
The recommended way to run PyMOL-Python scripts is by using PyMOL as the interpreter. This is supported by all versions of PyMOL, including the pre-compiled bundles provided by Schrödinger.
Example from a shell:
shell> pymol -cq script.py
Example from a running PyMOL instance:
PyMOL> run script.py
For advanced users, Open-Source PyMOL (as well as the Schrödinger-provided "Mac alternative X11-only build") also allows to run PyMOL from an existing Python process. After importing the pymol module, PyMOL's event loop has to be started with a call to pymol.finish_launching().
Example 1
Here is an example script that launches PyMol for stereo viewing on a VisBox. It runs PyMol fullscreen stereo, and disables the internal gui. The environment (PYTHON_PATH and PYMOL_PATH) must already be set up for this example to work (see Example 2 below for how to setup within the script).
#!/usr/bin/env python
# Tell PyMOL we don't want any GUI features.
import __main__
__main__.pymol_argv = [ 'pymol', '-qei' ]
# Importing the PyMOL module will create the window.
import pymol
# Call the function below before using any PyMOL modules.
pymol.finish_launching()
from pymol import cmd
cmd.stereo('walleye')
cmd.set('stereo_shift', 0.23)
cmd.set('stereo_angle', 1.0)
Example 2
This script launches PyMOL without any GUI for scripting only. It enables tab-completion on the python command line and does the PyMOL environment setup (you need to adjust the moddir variable!). Hint: You may save this as "pymol-cli" executable.
#!/usr/bin/python2.6 -i
import sys, os
# autocompletion
import readline
import rlcompleter
readline.parse_and_bind('tab: complete')
# pymol environment
moddir='/opt/pymol-svn/modules'
sys.path.insert(0, moddir)
os.environ['PYMOL_PATH'] = os.path.join(moddir, 'pymol/pymol_path')
# pymol launching
import pymol
pymol.pymol_argv = ['pymol','-qc'] + sys.argv[1:]
pymol.finish_launching()
cmd = pymol.cmd
STDOUT
PyMOL captures sys.stdout and sys.stderr, to control it with it's own feedback mechanism. To prevent that, save and restore both streams, e.g.:
import sys
stdout = sys.stdout
stderr = sys.stderr
pymol.finish_launching(['pymol', '-xiq'])
sys.stdout = stdout
sys.stderr = stderr