2016-10-17 8 views
1

Я пытаюсь создать сценарий командной строки, который может обрабатывать различные команды. код я сделал до сих пор выглядит следующим образом:Изменение переменных глобальных переменных в командной строке параметров в Python

#Globals 
SILENT = False 
VERBOSE = True 
EXIT_SUCCESS = 0 
EXIT_USAGE = 1 
EXIT_FAILED = 2 

def helpFunc(): 
    """ 
    This will print out a help text that describes the program to 
    the user and how to use it 
    """ 

    print("############################\n") 
    print("Display help \n-h, --help\n") 
    print("Current version \n-v, --version\n") 
    print("Silent \n-s, --silent\n") 
    print("Verbose\n --version\n") 

def versionFunc(): 
    """ 
    This will show the current version of the program 
    """ 
    print("Current version: \n" + str(sys.version)) 


def ping(url): 
    """ 
    Will ping a page given the URL and print out the result 
    """ 
    rTime = time.ctime(time.time()) 

    if VERBOSE == True: 
     print(rTime) 

    print(url) 

def pingHistory(arg): 
    """ 
    Will show the history saved from past pings 
    """ 


def parseOptions(): 
    """ 
    Options 
    """ 

    try: 
     opt, arg = getopt.getopt(sys.argv[1:], "hvs", ['help', 'version', 'silent', 'verbose', "ping="]) 
     print("options: " + str(opt)) 
     print("arguments: " + str(arg)) 


     for opt, arg in opt: 
      if opt in ("-h", "--help"): 
       helpFunc() 

      elif opt in ("-v", "--version"): 
       versionFunc() 

      elif opt in ("-s", "--silent"): 
       VERBOSE = False 
       SILENT = True 

      elif opt in ("--verbose"): 
       VERBOSE = True 
       SILENT = False 

      #Send to ping funct 
      if len(arg) > 0: 
       if arg[0] == "ping": 
        ping(arg[1]) 

      else: 
       helpFunc() 


    except getopt.GetoptError as err: 
     # will print something like "option -a not recognized", 
     # easier to se what went wrong 
     print(err) 
     sys.exit(EXIT_USAGE) 


def main(): 
    """ 
    Main function to carry out the work. 
    """ 
    from datetime import datetime 

    parseOptions() 


    sys.exit(EXIT_SUCCESS) 


if __name__ == "__main__": 
    import sys, getopt, time, requests 

    main() 
    sys.exit(0) 

Теперь я хочу использовать глобалов Сайлент и VERBOSE изменить другой вывод программы будет делать. Поэтому, если мне нравится писать -s ping dbwebb.se, я хочу, чтобы программа пропускала часть в функции ping, которая выводит время. Но по какой-то причине я не могу сохранить изменения, которые я делаю для глобальных переменных, потому что каждый раз, когда я запускаю программу и записывает -s, программа по-прежнему считает, что SILENT является ложным.

ответ

0

Вы должны объявить эти глобальные переменные глобальными в определении функции, например.

def parseOptions(): 
    """ 
    Options 
    """ 
    global VERBOSE 
    global SILENT