# Python argparse command line flags without arguments

## The Question :

382 people think this question is useful

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.

• If you just want 1 flag to your script, sys.argv would be a whole lot easier. Unless your specifically trying to learn argparse, which is a good because its a handy module to know.
• Even after I know the answer now I don’t see how I could have understood it from the documentation.

597 people think this answer is useful

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()



where action='store_true' implies default=False.

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

58 people think this answer is useful

Source: myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")

args = parser.parse_args()
print args.w



Usage:

python myparser.py -w
>> True



4 people think this answer is useful

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')



usage

\$ python3 script.py -f



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

args = parser.parse_args()
print(args.f)


>>>true



Here’s a quick way to do it, won’t require anything besides sys.. though functionality is limited:
flag = "--flag" in sys.argv[1:]
[1:] is in case if the full file name is --flag