使用argparse解析命令行参数

时间:2013-07-02 04:45:52

标签: python argparse command-line-parsing

我希望我的python程序像这样的参数解析命令:

python dosomething.py z a1 b1 a2 b2 ...

我可以拥有任意数量的#b#对,而z是一个不相关的数字。如果有必要,我可以指定a和b对的数量。

我正在使用argparse

2 个答案:

答案 0 :(得分:3)

您需要为此类专门行为定义custom action

import sys
import argparse

class AbsAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if len(values) % 2 == 0:
            # If valid, store the values.
            setattr(namespace, self.dest, values)

            # You could convert the flat list to a list of 2-tuples, if needed:
            #   zip(values[::2], values[1::2])
        else:
            # Otherwise, invoke a parser error with a message.
            parser.error('abs must be supplied as pairs')


ap = argparse.ArgumentParser()
ap.add_argument('z')
ap.add_argument('abs', nargs = '+', action = AbsAction)
opt = ap.parse_args()
print opt

答案 1 :(得分:0)

import sys

def main(args):
    print args[0]
    print len(args)
    print [arg for arg in args]

if __name__ == '__main__':
    main(sys.argv)