从bash

时间:2019-01-03 12:16:29

标签: python bash arguments

我有一些带有许多参数的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传递?

2 个答案:

答案 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']

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