Python argparse command line flags without arguments

222,999

Solution 1

As you have it, the argument w is expecting a value after -w on the command line. If you are just looking to flip a switch by setting a variable True or False, have a look here (specifically store_true and store_false)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

where action='store_true' implies default=False.

Conversely, you could haveaction='store_false', which implies default=True.

Solution 2

Adding a quick snippet to have it ready to execute:

Source: 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

Usage:

python myparser.py -w
>> True

Solution 3

Your script is right. But by default is of None type. So it considers true of any other value other than None is assigned to args.argument_name variable.

I would suggest you to add a action="store_true". This would make the True/False type of flag. If used its True else False.

import argparse
parser = argparse.ArgumentParser('parser-name')
parser.add_argument("-f","--flag",action="store_true",help="just a flag argument")

usage

$ python3 script.py -f

After parsing when checked with args.f it returns true,

args = parser.parse_args()
print(args.f)
>>>true
Share:
222,999
interstar
Author by

interstar

I'm a programmer, teacher and digital artist. See http://sdi.thoughtstorms.info/ for most of my programming related thoughts.

Updated on August 01, 2022

Comments

  • interstar
    interstar almost 2 years

    How do I add an optional flag to my command line args?

    eg. so I can write

    python myprog.py 
    

    or

    python myprog.py -w
    

    I tried

    parser.add_argument('-w')
    

    But I just get an error message saying

    Usage [-w W]
    error: argument -w: expected one argument
    

    which I take it means that it wants an argument value for the -w option. What's the way of just accepting a flag?

    I'm finding http://docs.python.org/library/argparse.html rather opaque on this question.