В этом разделе на примере разобраны правила и тонкости применения позиционных параметров командной строки для скрипта, при использовании модуля argparse
в Python.
Запишем следующий код в файл prog.py
:
# prog.py import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print(args.echo)
И запускаем код:
$ python3 prog.py usage: prog.py [-h] echo prog.py: error: the following arguments are required: echo $ python3 prog.py --help usage: prog.py [-h] echo positional arguments: echo optional arguments: -h, --help show this help message and exit $ python3 prog.py foo foo
Вот что происходит:
prog.py
есть метод parser.add_argument()
, который используется для указания того, какие позиционные параметры командной строки программа готова принять. В данном случае параметр называется echo
, что соответствует его функции.parser.parse_args()
фактически возвращает некоторые данные из указанных позиционных параметров, в данном случае это echo
.argparse
выполняет "бесплатно" - т.е. нет необходимости указывать, в какой переменной хранится это значение. Можно также заметить, что имя метода args.echo
соответствует строковому аргументу 'echo'
.Обратите внимание, что, вывод справки выглядит красиво, но в настоящее время она мало чем полезна. Например в справке можно увидеть, что echo
- это позиционный аргумент, но не говорится что он делает.
Сделаем справку более полезной:
# prog.py import argparse parser = argparse.ArgumentParser() parser.add_argument("echo", help="echo the string you use here") args = parser.parse_args() print(args.echo)
Вот что получаем:
$ python3 prog.py -h usage: prog.py [-h] echo positional arguments: echo echo the string you use here optional arguments: -h, --help show this help message and exit
Теперь усовершенствуем программу. Например будем возводить переданное скрипту prog.py
число в квадрат.
# prog.py import argparse parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number") args = parser.parse_args() print(args.square**2)
Ниже приведен результат выполнения кода:
$ python3 prog.py 4 Traceback (most recent call last): File "prog.py", line 5, in <module> print(args.square**2) TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
Все прошло не так, как планировалось. Ошибка произошла потому, что модуль argparse
рассматривает передаваемые скрипту позиционные параметры, как строки, если не указано другое. Расскажем модулю argparse
как относиться к передаваемому позиционному параметру square
:
import argparse parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) args = parser.parse_args() print(args.square**2)
Результат выполнения кода:
$ python3 prog.py 4 16 $ python3 prog.py four usage: prog.py [-h] square prog.py: error: argument square: invalid int value: 'four'
Теперь программа ведет себя как и ожидалось и выводит сведения об допущенной ошибке.