python argh/argparse: 如何将列表作为命令行参数传递?

12 浏览
0 Comments

python argh/argparse: 如何将列表作为命令行参数传递?

我正在尝试使用argh库将一系列参数传递给一个Python脚本。它可以接受以下输入:

./my_script.py my-func --argA blah --argB 1 2 3 4
./my_script.py my-func --argA blah --argB 1
./my_script.py my-func --argA blah --argB 

我内部的代码如下:

import argh
@argh.arg('--argA', default="bleh", help='我的第一个参数')
@argh.arg('--argB', default=[], help='一个列表类型的参数,但实际上并不是!')
def my_func(args):
    "一个做某事的函数"
    print args.argA
    print args.argB
    for b in args.argB:
        print int(b)*int(b)  #打印列表中每个数字的平方
    print sum([int(b) for b in args.argB])  #打印列表的总和
p = argh.ArghParser()
p.add_commands([my_func])
p.dispatch()

以下是它的行为:

$ python temp.py my-func --argA blooh --argB 1
blooh
['1']
1
1
$ python temp.py my-func --argA blooh --argB 10
blooh
['1', '0']
1
0
1
$ python temp.py my-func --argA blooh --argB 1 2 3
usage: temp.py [-h] {my-func} ...
temp.py: error: 无法识别的参数: 2 3

问题似乎很明显:argh只接受第一个参数,并将其视为字符串。我如何使其"期望"一个整数列表呢?

我在optparse中看到了解决方法,但argparse(未弃用)和argh的装饰语法呢?它们似乎更加符合Python的风格。

0