Получение аргумента командной строки Python с использованием «getopt», когда нет соответствующего ключа - PullRequest
0 голосов
/ 11 апреля 2019

Я пишу программу на python, в которой мне нужно прочитать различные необязательные аргументы командной строки и один ОБЯЗАТЕЛЬНЫЙ аргумент (строку), который в идеале должен быть последним аргументом в командной строке.При использовании getopt я могу читать все, кроме этой строки, если только я не настроил ее, также требующий использования флага (скажем, -s) перед ним, например:

Usage: myProgram.py [options] -s "some string"

Options available:
    -x                                     # Turn on option X
    -y                                     # Turn on option Y
    -a "used-defined parameter 1"
    -b "used-defined parameter 2"
    -c "used-defined parameter 3"
    -d "used-defined parameter 4"
    -s "used-defined string" (REQUIRED)

где код для обработки аргументов будет выглядеть следующим образом:

    (opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:s:')

Это позволит проанализировать аргументы в парах ключ-значение допустимых параметров командной строки.

Вместо этого I 'Хотелось бы разрешить пользователю вводить его так:

Usage: myProgram.py [options] "some string"

без идентификатора -s.Как написано выше, если -s явно не включен, код getopt не будет захватывать эту последнюю строку.Я не могу просто предположить mystring = sys.argv[-1], потому что это может быть параметром для одного из других необязательных аргументов.Как мне изменить строку getopt (или какой дополнительный шаг я должен добавить), чтобы перехватить эту последнюю строку, когда нет ключа для ее идентификации, не путая ее с другим существующим ключом?

1 Ответ

0 голосов
/ 12 апреля 2019

Решение ( в соответствии с предложением @ tripleee ) состояло в том, чтобы добавить пару дополнительных строк для захвата оставшихся аргументов командной строки и присвоить их переменной, которую мне нужно было использовать в коде. В частности:

    (opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:')
    if args != "":
        if len(args) == 1:
            myString = args[0]
        else:
            myString = " ".join(args)
...