解析其他选项后,argparse调用一个函数

时间:2012-11-27 18:55:50

标签: python python-2.7 argparse

目前,我使用argparse来解析参数并将标志存储为布尔选项。然后我检查看哪个标志设置为true并执行该功能。 Argparse解析一个输入文件,该文件被打开并作为参数传递给被调用函数。

所以:

parser.add_argument('input_data', action='store', help='some help')
parser.add_argument('outputname', action='store',default=None, help='some help')
parser.add_argument('--flag','-f', action='store_true', dest='flag', default=False, help='help!')

我必须打开input_data,在调用flag函数之前从中读取一些信息。目前实现为:

if args.flag == True:
    array_out = flag(array_read_from_input)
    if args.outputname == None:
        name = 'Flag.tif'

subclass argparse可以让action关键字调用一个函数。

是否可以解析input_data选项,执行一些处理,然后调用flag函数,而不必为每个参数嵌套if循环,例如,通过继承argparse的action参数?

1 个答案:

答案 0 :(得分:0)

  

是否可以解析input_data选项,执行一些选项   处理,然后在没有嵌套if的情况下调用flag函数   每个参数的循环,例如,通过子类化argparse的动作   参数β

根据你的问题;

class FooAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        << some processing of values >>
        array_out = flag(values)
        setattr(namespace, self.dest, array_out)

parser = argparse.ArgumentParser()
parser.add_argument('input_data', action=FooAction, help='some help')