[英]Passing an array into python argument from bash
我有一些带有许多参数的python脚本foo.py
在该脚本中,我使用argparse import ArgumentParser
进行解析。
我想传递一个数组作为bash中其中一个的值。 我努力了:
python foo.py --arg1=1 --arrArg=[1,2] --arg3=x
当我在脚本中打印它们时,我得到:
ARG1 = 1
arrArg = [ '1', '', '2']
ARG3 = X
我如何将barry中的数字作为arry传递?
如果您自己并且仅自己使用脚本,则可以使用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)
否则,对argparse使用nargs='+'
参数:
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
调用脚本python foo.py --arr 1 2 3 --bla blablabla
有几种方法可以执行此操作:使用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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.