В некоторых случаях при создании CLI (command line interfaces) на Python с использованием модуля argparse возникает необходимость сделать позиционные аргументы опциональными. В качестве примера можно привести случай, когда разработчик хочет, чтобы его скрипт принимал определенную директорию в качестве аргумента, но при этом использовал текущую директорию, если аргумент не был указан.
В случае прямого использования метода add_argument
для такой задачи, скрипт будет возвращать ошибку Error: Too few arguments
, если позиционный аргумент не будет передан.
import argparse import os parser = argparse.ArgumentParser() parser.add_argument('dir', default=os.getcwd()) args = parser.parse_args() print(args.dir)
Вероятнее всего, это произойдет потому, что в argparse позиционные аргументы по умолчанию являются обязательными.
Однако, это не означает, что задачу невозможно решить. Для этого можно использовать опциональные аргументы и немного изменить логику работы.
Опциональные аргументы в argparse начинаются с дефиса -
или двух дефисов --
. Если аргумент не был передан при вызове скрипта, его значение будет равно None. Эту особенность можно использовать для решения задачи.
import argparse import os parser = argparse.ArgumentParser() parser.add_argument('--dir', default=None) args = parser.parse_args() if args.dir is None: args.dir = os.getcwd() print(args.dir)
В данном случае, если аргумент --dir
не был передан, его значение будет None
, и в этом случае скрипт присвоит переменной args.dir
текущую директорию. Если же аргумент был передан, его значение будет использоваться без изменений.
Добавить комментарий