in modules/pymol/invocation.py [0:0]
def parse_args(argv, _pymol=None, options=None, restricted=0):
if not restricted:
global _argv
_argv = copy.deepcopy(argv) # pymol.invocation._argv
global global_options
if options == None:
if _pymol==None:
options = global_options
else:
options = _pymol.invocation.options
av = copy.deepcopy(argv)
av = av[1:] # throw out the executable path
av.reverse()
once_dict = {}
options.deferred = []
final_actions = []
loaded_something = 0
python_script = None
# append user settings file as an option
pymolrc = get_user_config()
while 1:
if not len(av):
break
a = av.pop()
a = re.sub(r'''^"|"$|^'|'$''','',a) # strip extra quotes
if a[0:1]=='-':
if (a[1:2]=='-'):
if a in ('--version', '--help'):
import pymol
print(pymol.get_version_message())
if a == '--help':
print(helptext1)
if pymolrc:
for filename in pymolrc:
print(' ' + filename)
else:
print(' (no pymolrc file found)')
print(helptext2)
sys.exit()
elif a == "--retina":
options.retina = 1
elif a == "--nospnav":
print(' Warning: --nospnav not available in Open-Source PyMOL')
elif a == "--gldebug":
options.gldebug = 1
elif a == "--testing":
options.testing = 1
else:
# double hypen signals end of PyMOL arguments
if python_script == None:
python_script = argv[0]
rev_av = copy.deepcopy(av)
rev_av.reverse()
if len(a)>2:
sys.argv = [python_script] + [a] + rev_av
else:
sys.argv = [python_script] + rev_av
break
continue
if ("A" in a) or ("a" in a): # application configuration
new_args = []
# ====== mode 1 - simple viewer window ======
if a[2:3] == "1":
if 'A1' not in once_dict:
once_dict['A1'] = 1
new_args = ["-qxiF",
"-X","68",
"-Y","100",
]
# ====== mode 2 - not available -- clashes with -2 =======
# ====== mode 3 - internal GUI only no splash ======
if a[2:3] == "3":
if 'A3' not in once_dict:
once_dict['A3'] = 1
new_args = ["-qx",
"-X","68",
"-Y","100",
]
# ====== mode 4 - internal GUI only with splash ======
if a[2:3] == "4": # used by PYMOLVIEWER
if 'A4' not in once_dict:
once_dict['A4'] = 1
new_args = [
"-X","68",
"-Y","100",
]
# ====== mode 5 - mode 5 helper application ======
if a[2:3] == "5":
if 'A5' not in once_dict:
once_dict['A5'] = 1
new_args = ["-QxiICUF",
"-X","68",
"-Y","100",
]
# ====== mode 6 - mode 6 presentation (no GUI) ======
if a[2:3] == "6":
if 'A6' not in once_dict:
once_dict['A6'] = 1
new_args = ["-qxieICUPF",
]
# ===============================================
new_args.reverse()
av = av + new_args
if "1" in a[1:2]:
options.deferred.append("_do__ config_mouse one_button")
if "2" in a[1:2]:
options.deferred.append("_do__ config_mouse two_button")
if "q" in a:
options.show_splash = 0
if "i" in a:
options.internal_gui = 0
if "f" in a:
options.internal_feedback = int(av.pop())
if "F" in a:
options.internal_feedback = 0
if "B" in a:
options.blue_line = 1
if "E" in a:
options.multisample = int(av.pop())
if "P" in a:
options.presentation = 1
if "W" in a:
options.win_x = int(av.pop())
options.win_xy_set = True
if "H" in a:
options.win_y = int(av.pop())
options.win_xy_set = True
if "X" in a:
options.win_px = int(av.pop())
if "y" in a:
options.exit_on_error = 1
if "Y" in a:
options.win_py = int(av.pop())
if "D" in a:
options.defer_builds_mode = int(av.pop())
if "V" in a:
options.ext_y = int(av.pop())
if "N" in a: # external gui name...
options.gui = av.pop()
if "x" in a:
options.external_gui = 0
if "n" in a:
options.incentive_product = 1
if "t" in a: # type of stereo to use
options.stereo_mode = int(av.pop())
if "T" in a: # what skin to use?
options.skin = str(av.pop())
if "w" in a: # what gui to use
options.gui = str(av.pop())
if "O" in a:
options.sphere_mode = int(av.pop())
if "z" in a:
options.window_visible = 0
if "Z" in a:
options.zoom_mode = int(av.pop())
if options.zoom_mode==5:
final_actions.append("_do__ zoom")
if not restricted:
if "c" in a:
options.no_gui=1
options.external_gui=0
if "m" in a: # mac external GUI
if options.external_gui == 2:
options.external_gui = 3
if options.win_py == 184: # mac external GUI default
options.win_py = 216
else:
options.external_gui = 2
options.win_py = 184
if "e" in a:
options.full_screen = 1
if "G" in a: # Game mode (reqd for Mac stereo)
options.game_mode = 1
options.win_x = 1024
options.win_y = 768
if "S" in a: # Force stereo context on stereo-capable hardware
options.force_stereo = 1
if options.stereo_mode == 0:
options.stereo_mode = 1 # quadbuffer
if sys.platform=='darwin':
options.deferred.append(
"_do__ set stereo_double_pump_mono,1,quiet=1")
if "M" in a: # Force mono on stereo hardware (all)
options.force_stereo = -1
if "j" in a: # Geowall: two side-by-side images
options.stereo_mode = 4
options.deferred.append("_do__ stereo on")
if ("d" in a):
options.deferred.append(
"_do_" + av.pop().replace('%',' '))
if ("J" in a): # cd to user's home directory on startup (if possible)
path = get_personal_folder()
try:
# immediatly chdir (was: options.deferred.append(...))
os.chdir(path)
# clear PYMOL_WD, which may be set by MacPyMOL
os.environ.pop('PYMOL_WD', None)
except OSError:
print(" Error: could not chdir to", repr(path))
if ("l" in a):
options.deferred.append("_do_spawn %s"%av.pop())
if ("r" in a):
options.deferred.append("_do_run %s,main"%av.pop())
if ("u" in a):
options.deferred.append("_do_resume %s"%av.pop())
if ("s" in a):
options.deferred.append("_do_log_open %s"%av.pop())
if ("o" in a):
options.security = 0
if ("R" in a):
options.rpcServer = 1
if ("g" in a):
filename = av.pop()
if '.png' in filename:
options.deferred.append("_do__ cmd.png('''%s''')"%filename)
elif '.mpg' in filename:
options.deferred.append("_do__ movie.produce('''%s''')"%filename)
if ("C" in a):
options.sigint_handler = 0
if ("L" in a):
options.after_load_script = av.pop()
if ("b" in a): # CPU benchmark
options.deferred.append("_do__ feedback disable,all,everything")
options.deferred.append("_do__ feedback enable,python,output")
options.deferred.append("_do_wizard benchmark")
if a[2:]=='':
options.deferred.append("_do__ cmd.get_wizard().run_cpu()")
if a[2:]=='0':
options.deferred.append("_do__ cmd.get_wizard().ray_trace0()")
if a[2:]=='1':
options.deferred.append("_do__ cmd.get_wizard().ray_trace1()")
if a[2:]=='2':
options.deferred.append("_do__ cmd.get_wizard().ray_trace2()")
if "p" in a:
options.read_stdin = 1
if "K" in a:
options.keep_thread_alive = 1
if "k" in a: # suppress reading of .pymolrc and related files
pymolrc = None
options.plugins = 0
if "U" in a: #
options.reuse_helper = 1
if "Q" in a:
options.quiet = 1
options.show_splash = 0
if "I" in a:
options.auto_reinitialize = 1
if "h" in a: # generic helper application
options.internal_gui = 0
options.external_gui = 0
options.internal_feedback = 0
options.show_splash = 1
elif a in ('+1', '+2', '+3', '+4'):
print('ignoring PyMOLWin.exe argument', a)
elif not restricted:
suffix = a[-4:].lower().split('.')[-1]
if suffix == "p5m":
# mode 5 helper application
av.append("-A5")
elif suffix == "psw":
# presentation mode
av.append("-A6")
elif suffix in [ 'pym' ,'py', 'pyc' ]:
python_script = a
elif suffix in [ 'pwg' ]:
try:
pwg_options = get_pwg_options(a)
if pwg_options:
parse_args(['pymol'] + pwg_options, _pymol, options, 1)
except:
traceback.print_exc()
options.deferred.append(a)
loaded_something = 1
if pymolrc != None:
options.deferred = [('_do__ @' + a) if script_re.search(a) else a
for a in pymolrc] + options.deferred
options.pymolrc = pymolrc
if options.rpcServer:
options.deferred.append('_do__ /import pymol.rpc;pymol.rpc.launch_XMLRPC()')
if options.plugins == 1:
# Load plugins independent of PMGApp (will not add menu items)
options.deferred.append('_do__ /import pymol.plugins;pymol.plugins.initialize(-1)')
if loaded_something and (options.after_load_script!=""):
options.deferred.append(options.after_load_script)
options.deferred.extend(final_actions)
if options.show_splash and not options.no_gui and not restricted:
options.deferred.insert(0,"_do__ cmd.splash(1)")
if options.full_screen:
options.deferred.append("_do__ full_screen on")