[PyMOL] Command-line arguments when using PyMOL to launch a script

2008-02-15 Thread Josep Maria Campanera Alsina
Hi all,
I'd like to execute pymol like: pymol -c script.py arg1 arg2 arg3 arg4.

(1) Reading into PyMolWiki
http://www.pymolwiki.org/index.php/Scripting, I've learned that I have
to type:

pymol -c script.py -- arg1 arg2 arg3 arg4

and then add to my script:

from sys import argv
my_argv =3D argv[argv.index(--):]
print my_argv[1], my_argv[2]

But it doesn work!

Traceback (most recent call last):
File /home/campa/SOFTWARE/pymol/modules/pymol/parser.py, line 285, in parse
parsing.run_file(exp_path(args[nest][0]),pymol_names,pymol_names)
File /home/campa/SOFTWARE/pymol/modules/pymol/parsing.py, line 407,
in run_file
execfile(file,global_ns,local_ns)
File rotamermod3.py, line 45
 my_argv =3D argv[argv.index(--):]
   ^
 SyntaxError: invalid syntax

(2) Then I found an alternatively procedure
http://sourceforge.net/mailarchive/message.php?msg_id=e4c539ed0708011206nf6dc1a1r257f7311f42aa59e%40mail.gmail.com

Identical command: pymol -c script.py -- arg1 arg2 arg3 arg4

But I have to add into my script.py the following:

argv = sys.argv[sys.argv.index('--') + 1:]
options,args = parser.parse_args(args=argv)

But it doesn't work neither:
AttributeError: 'module' object has no attribute 'argv'

Can someone give a light in how to call arguments in pymol -c script.py?

Thanks a lot,

Josep Maria Campanera,



Re: [PyMOL] Command-line arguments when using PyMOL to launch a script

2008-02-15 Thread Michael Lerner
Hi,

First, the initial error you were seeing was a syntax error:

 from sys import argv
 my_argv =3D argv[argv.index(--):]
 print my_argv[1], my_argv[2]

is failing because of the word 3D

Second, that used to fail on Linux systems anyway (it worked on some
other systems). I tend to use optparse, which often requires things to
live in sys.argv. Here's my current workaround:

#argv = sys.argv[sys.argv.index('--') + 1:]
try:
argv = sys.argv
except AttributeError:
argv = pymol_argv
sys.argv = pymol_argv # this is necessary for optparse to
handle the --help option.
try:
argv = argv[argv.index('--') + 1:]
except IndexError:
argv = []

options,args = parser.parse_args(args=argv)

I haven't re-tested Linux recently, though. It might be that the
pymol_argv workaround is not necessary anymore.

-michael

-- 
IRTA Postdoctoral Fellow
Laboratory of Computational Biology NIH/NHLBI
5635 Fishers Lane, Room T909
http://www.umich.edu/~mlerner



[PyMOL] Command-line arguments when using PyMOL to launch a script

2007-08-01 Thread Michael Lerner
Hi,

I have a script that uses PyMOL to aid with a lot of calculations. So,
I run the script like this:

pymol -c script.py

The script has grown so that it has a lot of options. Right now, I
edit the script every time I want to change them. If it were a normal
Python script, I'd run it like

script.py --do=something --when=now

Is there a standard way to do this via PyMOL? Ideally, I'd like to say

pymol -qcr script.py --do=something --when=now
and have script.py think that sys.argv == ['script.py',
'--do=something', '--when=now'].

I pawed through pymol.invocation.py, and it looks like PyMOL respects
the convention where it won't parse arguments after a '--', so my
current workaround is to launch things like

pymol -qcr script.py -- -do=something --when=now

and then this in my script:

argv = sys.argv[sys.argv.index('--') + 1:]
...
# parse with optparse
options,args = parser.parse_args(args=argv)

So, is there a more standard way of doing this? If not, hopefully
google will find this for me the next time I have this question :).

Thanks,

-Michael
-- 
Biophysics Graduate Student
Carlson Lab, University of Michigan
http://www.umich.edu/~mlerner