How to pass and parse a list of strings from command line with argparse.ArgumentParser in Python?

argparse, python

Solution

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

Problem

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!

Original source