Изменить глобальные переменные в программе параметров командной строки в 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)

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


person anderssinho    schedule 17.10.2016    source источник


Ответы (1)


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

def parseOptions():
    """
    Options
    """
    global VERBOSE
    global SILENT
person MarianD    schedule 17.10.2016