Флаги командной строки Python argparse без аргументов
Как добавить необязательный флаг в мои аргументы командной строки?
например. поэтому я могу написать
python myprog.py
или
python myprog.py -w
Я пробовал
parser.add_argument('-w')
Но я просто получаю сообщение об ошибке
Usage [-w W]
error: argument -w: expected one argument
который я воспринимаю, означает, что он хочет значение аргумента для параметра -w. Какой способ просто принять флаг?
Я нахожу http://docs.python.org/library/argparse.html довольно непрозрачным по этому вопросу.
Ответы
Ответ 1
Как вы понимаете, аргумент w ожидает значение после -w в командной строке. Если вы просто хотите переключиться, установив переменную True
или False
, взгляните на http://docs.python.org/dev/library/argparse.html#action (в частности store_true и store_false)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')
Редактировать: Как указывает Свен, значение по умолчанию в этом случае является излишним.
Ответ 2
Добавление быстрого фрагмента, чтобы он был готов к выполнению:
Источник: myparser.py
import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')
args = parser.parse_args()
print args.w
Применение:
python myparser.py -w
>> True
Ответ 3
при добавлении аргумента в парсер, флаг action = "store_true" устанавливает значение по умолчанию для аргумента True. Итак, parser.add_argument ('- w', action = "store_true" ) должен решить эту ошибку.
Ответ 4
Вот быстрый способ сделать это, не требуя ничего кроме sys
.. хотя функциональность ограничена:
flag = "--flag" in sys.argv[1:]
[1:]
в случае, если полное имя файла --flag