Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python argparse with possibly empty string value

I would like to use argparse to pass some values throughout my main function. When calling the python file, I would always like to include the flag for the argument, while either including or excluding its string argument. This is because some external code, where the python file is being called, becomes a lot simpler if this would be possible.

When adding the arguments by calling parser.add_argument, I've tried setting the default value to default=None and also setting it to default=''. I can't make this work on my own it seems..

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-p', '--projects_to_build', default='')
    args = parser.parse_args()

This call works fine:

py .\python_file.py -p proj_1,proj_2,proj_3

This call does not:

py .\python_file.py -p

python_file.py: error: argument -p/--projects_to_build: expected one argument
like image 941
Kuratorn Avatar asked Oct 15 '19 13:10

Kuratorn


1 Answers

You need to pass a nargs value of '?' with const=''

parser.add_argument('-p', '--projects_to_build', nargs='?', const='')

You should also consider adding required=True so you don't have to pass default='' as well.

like image 78
Patrick Haugh Avatar answered Oct 17 '22 07:10

Patrick Haugh