07 Июл 2023
2 мин
154

Опциональные позиционные аргументы в argparse

В некоторых случаях при создании CLI (command line interfaces) на Python с использованием модуля argparse возникает необходимость сделать позиционные аргументы опциональными.

Содержание

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

Содержание

Добавить комментарий

Определи профессию по рисунку