Сообщить об ошибке.

Необязательные параметры скрипта модуля argparse в Python

Правила использования необязательных аргументов командной строки

В этом разделе на примере разобраны правила и тонкости применения необязательных параметров командной строки для скрипта, при использовании модуля argparse в Python.

Разберемся, как можно добавить необязательные параметры командной строки в файл prog.py:

# prog.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
    print("verbosity turned on")

Запуск скрипта в командной строке даст вывод, представленный ниже.

$ python3 prog.py --verbosity 1
verbosity turned on
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

optional arguments:
  -h, --help            show this help message and exit
  --verbosity VERBOSITY
                        increase output verbosity
$ python3 prog.py --verbosity
usage: prog.py [-h] [--verbosity VERBOSITY]
prog.py: error: argument --verbosity: expected one argument

Вот что здесь происходит:

  • Программа написана таким образом, чтобы что-то выводить, когда указан необязательный параметр --verbosity и ничего не выводить, если параметр не указан.
  • Опция является необязательной, т.к. при запуске программы без нее не будет ошибок.

    Обратите внимание, если необязательный параметр в командной строке не используется, то переменной, в данном случае args.verbosity, по умолчанию присваивается значение None. Это и является причиной того, что она не проходит проверку истинности в операторе if.

  • Справочное сообщение немного другое.

  • При использовании опции командной строки --verbosity необходимо также указать какое-то значение.

В приведенном выше примере для --verbosity, в командной строке, указывается произвольные целочисленное значение, но для этой программы на самом деле полезны только два значения: True или False.

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

# prog.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

И вывод скрипта prog.py при запуске:

$ python3 prog.py --verbose
verbosity turned on
$ python3 prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1
$ python3 prog.py --help
usage: prog.py [-h] [--verbose]

optional arguments:
  -h, --help  show this help message and exit
  --verbose   increase output verbosity

Вот что здесь происходит:

  • Опция теперь больше похожа на флаг, чем на то, что требует значения. Мы изменили название опции на --verbose, чтобы соответствовать этой идее.

    Обратите внимание, что теперь указывается новое ключевое слово --verbose и присваиваем ему значение store_true. Это означает, что, если необязательный параметр указан, то модуль argparse присвоит args.verbose значение True. Отсутствие необязательного параметра --verbose в командной строке подразумевает args.verbose=False.

  • Скрипт prog.py будет ругаться, если указать значение параметру --verbose.

  • Обратите внимание на другой текст справки.

Короткие варианты необязательных параметров.

Если вы знакомы с использованием командной строки, то заметите, что еще не затронута тема коротких версий необязательных параметров.

Это довольно просто:

# prog.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

Вывод скрипта после его запуска. Обратите внимание, что новая возможность также отражена в тексте справки.

$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity