繁体   English   中英

从bash将数组传递到python参数

[英]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']

参考: https : //docs.python.org/3/library/argparse.html#nargs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM