В этом разделе на примере разобраны правила и тонкости применения необязательных параметров командной строки для скрипта, при использовании модуля 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