параметры командной строки и аргументы, использующие getopt - PullRequest
3 голосов
/ 03 июля 2011

Я пытаюсь написать кусок кода на python, чтобы получить параметры командной строки и аргументы с помощью модуля getopt.Вот мой код:

import getopt
import sys

def usage ():
    print('Usage')

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'xy:')
    except getopt.GetoptError as err:
        print(err)
        usage()
        sys.exit()

    for o,a in opts:
        if o in ("-x", "--xxx"):
            print(a)
        elif o in ("-y", "--yyy"):
            print(a)
        else:
            usage()
            sys.exit()

if __name__ == "__main__":
    main()

Проблема в том, что я не могу прочитать аргумент опции x, но я могу прочитать аргумент y.Что я должен сделать, чтобы это исправить?

Ответы [ 2 ]

11 голосов
/ 03 июля 2011

Попробуйте getopt.getopt(sys.argv[1:], 'x:y:')

http://docs.python.org/library/getopt.html

Анализирует параметры командной строки и список параметров.args - список аргументов для анализа без ведущей ссылки на работающую программу.Как правило, это означает sys.argv [1:].options - это строка букв опций, которые сценарий хочет распознать, с опциями, которые требуют аргумента, за которым следует двоеточие (':'; т. е. тот же формат, что и в Unix getopt ()).

0 голосов
/ 04 января 2019

Если вы хотите прочитать аргумент, то опция должна иметь рядом с ним ':', есть несколько опций, которым не нужны аргументы, такие как 'help' и 'verbose', которые не нуждаются в ':', чтобы быть последовало.

import getopt
import sys

def usage ():
    print('Usage')

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'x:y:h', ['xxx=', 'yyy=', 'help='])
    except getopt.GetoptError as err:
        print(err)
        usage()
        sys.exit()

    for opt,arg in opts:
        if opt in('-h', '--help'):
            usage()
            sys.exit( 2 )
        elif opt in ('-x', '--xxx'):
            print(arg)
        elif opt in ('-y', '--yyy'):
            print(arg)
        else:
            usage()
            sys.exit()

if __name__ == "__main__":
    main()
...