def get_version(quiet=1,_self=cmd): ''' DESCRIPTION "get_version" returns a tuple of length six containing text, floating point, and integer representations of the current PyMOL version number, build date as unix timestamp, GIT SHA and SVN code revision so far available. PYMOL API cmd.get_version(int quiet) ''' # get_version doesn't need the _COb and doesn't require a lock r = _cmd.get_version() if _raising(r,_self): raise pymol.CmdException else: quiet = int(quiet) if quiet < 1 and _feedback(fb_module.cmd, fb_mask.results, _self): import re p = pymol.get_version_message(r) print re.sub(r'^', ' ', p, re.M) if quiet < 0: if r[3]: print ' build date:', time.strftime('%c %Z', time.localtime(r[3])) if r[4]: print ' git sha:', r[4] return r
def get_version(quiet=1,_self=cmd): ''' DESCRIPTION "get_version" returns a tuple of length six containing text, floating point, and integer representations of the current PyMOL version number, build date as unix timestamp, GIT SHA and SVN code revision so far available. PYMOL API cmd.get_version(int quiet) ''' # get_version doesn't need the _COb and doesn't require a lock r = _cmd.get_version() if True: quiet = int(quiet) if quiet < 1 and _feedback(fb_module.cmd, fb_mask.results, _self): import re p = pymol.get_version_message(r) print(re.sub(r'^', ' ', p, re.M)) if quiet < 0: if r[3]: print(' build date:', time.strftime('%c %Z', time.localtime(r[3]))) if r[4]: print(' git sha:', r[4]) return r
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")
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() 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 not once_dict.has_key('A1'): 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 not once_dict.has_key('A3'): 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 not once_dict.has_key('A4'): once_dict['A4'] = 1 new_args = [ "-X","68", "-Y","100", ] # ====== mode 5 - mode 5 helper application ====== if a[2:3] == "5": if not once_dict.has_key('A5'): once_dict['A5'] = 1 new_args = ["-QxiICUF", "-X","68", "-Y","100", ] # ====== mode 6 - mode 6 presentation (no GUI) ====== if a[2:3] == "6": if not once_dict.has_key('A6'): 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()) if "H" in a: options.win_y = int(av.pop()) 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 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_%s"%string.replace(av.pop(),'%',' ')) 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 not restricted: suffix = string.split(string.lower(a[-4:]),'.')[-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.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")