【Python】命令行如何传入列表作为参数
1. 代码
import argparse
parser = argparse.ArgumentParser()
'''By default it will fail with multiple arguments.'''
parser.add_argument('--default')
'''
Telling the type to be a list will also fail for multiple arguments,
but give incorrect results for a single argument.
'''
parser.add_argument('--list-type', type=list)
'''
This will allow you to provide multiple arguments, but you will get
a list of lists which is not desired.
'''
parser.add_argument('--list-type-nargs', type=list, nargs='+')
'''
This is the correct way to handle accepting multiple arguments.
# '+' == 1 or more.
# '*' == 0 or more.
# '?' == 0 or 1.
An int is an explicit number of arguments to accept.
'''
parser.add_argument('--nargs', nargs='+')
'''To make the input integers'''
parser.add_argument('--nargs-int-type', nargs='+', type=int)
'''
An alternate way to accept multiple inputs, but you must
provide the flag once per input. Of course, you can use
type=int here if you want.
'''
parser.add_argument('--append-action', action='append')
'''Show the results of the given option to screen.'''
for _, value in parser.parse_args()._get_kwargs():
if value is not None:
print(value)
2. 实验结果
$ python arg.py --default 1234 2345 3456 4567
error: unrecognized arguments: 2345 3456 4567
$ python arg.py --list-type 1234 2345 3456 4567
error: unrecognized arguments: 2345 3456 4567
$ python arg.py --list-type "1234 2345 3456 4567"
['1', '2', '3', '4', ' ', '2', '3', '4', '5', ' ', '3', '4', '5', '6', ' ', '4', '5', '6', '7']
$ python arg.py --list-type-nargs 1234 2345 3456 4567
[['1', '2', '3', '4'], ['2', '3', '4', '5'], ['3', '4', '5', '6'], ['4', '5', '6', '7']]
$ python arg.py --nargs 1234 2345 3456 4567
['1234', '2345', '3456', '4567']
$ python arg.py --nargs-int-type 1234 2345 3456 4567
[1234, 2345, 3456, 4567]
$ # Negative numbers are handled perfectly fine out of the box.
$ python arg.py --nargs-int-type -1234 2345 -3456 4567
[-1234, 2345, -3456, 4567]
$ python arg.py --append-action 1234 --append-action 2345 --append-action 3456 --append-action 4567
['1234', '2345', '3456', '4567']
3. 总结
这几种是可以的:
parser.add_argument('--nargs', nargs='+')
$ python arg.py --nargs 1234 2345 3456 4567
['1234', '2345', '3456', '4567']
parser.add_argument('--nargs-int-type', nargs='+', type=int)
$ python arg.py --nargs-int-type -1234 2345 -3456 4567
[-1234, 2345, -3456, 4567]
parser.add_argument('--append-action', action='append')
$ python arg.py --append-action 1234 --append-action 2345 --append-action 3456 --append-action 4567
['1234', '2345', '3456', '4567']
4. 参考
【1】https://blog.csdn.net/kinggang2017/article/details/94036386