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

Позиционные параметры скрипта на Python, модуль argparse

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

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

Теперь программа ведет себя как и ожидалось и выводит сведения об допущенной ошибке.