Python argparse: значение по умолчанию или указанное значение


174

Я хотел бы иметь необязательный аргумент, который будет иметь значение по умолчанию, если присутствует только флаг, без указания значения, но хранить значение, указанное пользователем, вместо значения по умолчанию, если пользователь указывает значение. Для этого уже есть действие?

Пример:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Я могу создать действие, но хотел посмотреть, существует ли способ сделать это.

Ответы:


273
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' означает 0 или 1 аргументов
  • const=1 устанавливает значение по умолчанию при наличии 0 аргументов
  • type=int преобразует аргумент в int

Если вы хотите test.pyустановить exampleв 1, даже если нет --example, то включите default=1. То есть с

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

затем

% test.py 
Namespace(example=1)

Как это сделать со строками? У меня есть дилемма с разграничением "" (пустая строка по умолчанию) и "" (пустая строка, введенная пользователем). В коде на данный момент я использую значение по умолчанию, и, поскольку мне нужно сделать несколько операций, у меня что-то вроде этого self.foo = (args.bar or some_else_source).upper(). Не сломается ни на одном объекте AFAIUC.
0

16

На самом деле, вам нужно использовать defaultаргумент только add_argumentкак в этом test.pyсценарии:

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

Подробности здесь .


7

Разница между:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

и

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

таким образом:

myscript.py => debug равен 7 (по умолчанию) в первом случае и «None» во втором

myscript.py --debug => отладка 1 в каждом случае

myscript.py --debug 2 => отладка 2 в каждом случае

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.