我有一些带有许多参数的python脚本foo.py
。在该脚本中,我使用argparse import ArgumentParser
来解析它们。
我想从bash传递一个数组作为其中之一的值。我尝试过:
python foo.py --arg1=1 --arrArg=[1,2] --arg3=x
当我在脚本中打印它们时,我得到:
arg1 = 1
arrArg = ['1',',','2']
arg3 = x
如何将bash中的数字作为arry传递?
答案 0 :(得分:1)
如果您自己并且仅自己使用脚本,则可以使用eval()
。但是请注意,这不是很安全的功能。当您不知道输入内容是什么时,请勿永远使用此功能。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--arr',
help='Array of integers')
args = parser.parse_args()
data = eval(args.arr)
print(type(data))
print(data)
否则,将nargs='+'
参数用于argparse:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--arr', nargs='+', type=int,
help='Array of integers')
args = parser.parse_args()
data = args.arr
print(type(data))
print(data)
然后使用python foo.py --arr 1 2 3 --bla blablabla
答案 1 :(得分:1)
执行此操作的方法很少:使用nargs
或使用action=append
:
import argparse
parser = argparse.ArgumentParser()
# You can specify number of elements in an array.
# '+' == 1 or more.
# '*' == 0 or more.
# '?' == 0 or 1.
# An int is an explicit number of elements to accept.
parser.add_argument('--nargs', nargs='+')
# To make the input integers
parser.add_argument('--nargs-int-type', nargs='+', type=int)
# Using `action=append`. But out must provide the flag for every
# input. And you can use type=int here as well.
parser.add_argument('--append-action', action='append')
# To show the results
for _, value in parser.parse_args()._get_kwargs():
if value is not None:
print(value)
结果将如下所示:
$ 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 also handled
$ 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']