Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make an optional value for argument using argparse?

I am creating a python script where I want to have an argument that manipulates how many search results you get as output. I've currently named the argument --head. This is the functionality I'd like it to have:

  1. When --head is not passed at the command line I'd like it to default to one value. In this case, a rather big one, like 80

  2. When --head is passed without any value, I'd like it to default to another value. In this case, something limited, like 10

  3. When --head is passed with a value, I'd like it to store the value it was passed.

Here is some code describing the problem:

>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('-h',                         '--head',                         dest='size',                         const=80,                         default=10,                         action="I don't know",                         help='Only print the head of the output') >>> # OFC, that last line will fail because the action is uknown, ... # but here is how I'd like it to work ... parser.parse_args(''.split()) Namespace(size=80) >>> parser.parse_args('--head'.split()) Namespace(size=10) >>> parser.parse_args('--head 15'.split()) Namespace(size=15) 

I know I probably can write a custom action for this, but I first want to see if there is any default behaviour that does this.

like image 364
totokaka Avatar asked Feb 24 '14 20:02

totokaka


People also ask

What is Argparse ArgumentParser ()?

The argparse module provides a convenient interface to handle command-line arguments. It displays the generic usage of the program, help, and errors. The parse_args() function of the ArgumentParser class parses arguments and adds value as an attribute dest of the object.

What does Nargs do in Argparse?

Number of Arguments If you want your parameters to accept a list of items you can specify nargs=n for how many arguments to accept. Note, if you set nargs=1 , it will return as a list not a single value.

What is ArgumentParser in Python?

Using argparse is how you let the user of your program provide values for variables at runtime. It's a means of communication between the writer of a program and the user. That user might be your future self. 😃 Using argparse means the doesn't need to go into the code and make changes to the script.


1 Answers

After a little more reading in the documentation I found what I needed: nargs='?'. This is used with the store action, and does exactly what I want.

Here is an example:

>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--head',                         dest='size',                         const=10,                         default=80,                         action='store',                         nargs='?',                         type=int,                         help='Only print the head of the output') >>> parser.parse_args(''.split()) ... Namespace(size=80) >>> parser.parse_args('--head'.split()) ... Namespace(size=10) >>> parser.parse_args('--head 15'.split()) ... Namespace(size=15) 

Source: http://docs.python.org/3/library/argparse.html#nargs

like image 197
totokaka Avatar answered Oct 04 '22 12:10

totokaka