I want to pass a list of names into my program written in Python from console. For instance, I would like to use a way similar to this (I know it shouldn't work because of bash
):
$ python myprog.py -n name1 name2
So, I tried this code:
# myprog.py from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('-n', '--names-list', default=[]) args = parser.parse_args() print(args.names_list) # I need ['name1', 'name2'] here
That led to the error:
usage: myprog.py [-h] [-n NAMES_LIST] myprog.py: error: unrecognized arguments: name2
I know I could pass the names with quotes "name1 name2"
and split it in my code args.names_list.split()
. But I'm curious, is there a better way to pass the list of strings via argparse
module.
Any ideas would be appreciated.
Thanks!
ArgumentParser() initializes the parser so that you can start to add custom arguments. To add your arguments, use parser. add_argument() . Some important parameters to note for this method are name , type , and required .
A “subparser” is an argument parser bound to a namespace. In other words, it works with everything after a certain positional argument. Argh implements commands by creating a subparser for every function.
You need to define --names-list
to take an arbitrary number of arguments.
parser.add_argument('-n', '--names-list', nargs='+', default=[])
Note that options with arbitrary number of arguments don't typically play well with positional arguments, though:
# Is this 4 arguments to -n, or # 3 arguments and a single positional argument, or ... myprog.py -n a b c d
You need to use nargs
:
parser.add_argument('-n', '--names-list', nargs="*")
https://docs.python.org/3/library/argparse.html#nargs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With