Skip to content
Advertisement

Python argparse – Detect if list argument is passed without anything afterwards

Let’s say the user types:

./args.py --create --mem 5

and my parser looks like this:

parser.add_argument('--create', nargs='*', default=None)

Normally --create takes a list with nargs='*', however in this case the user passed nothing.

What I would like to happen is that --create is set to the default value when invoked, instead I get []

Question: Is there anyway to detect if --create shows up in the command line arguments without anything after it?

Advertisement

Answer

Here is a simple code snippet:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--create', nargs='*', default=None)
options = parser.parse_args()
print(options)

Here are a few interactions:

$ ./args.py 
Namespace(create=None)

$ ./args.py --create
Namespace(create=[])

$ ./args.py --create one
Namespace(create=['one'])

$ ./args.py --create one two
Namespace(create=['one', 'two'])

As you can see, if the user does not add the --create flag, it is None. If the user use --create flag with nothing, you get an empty list.

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement