Флаги командной строки 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