目前,我正在使用 argparse 来解析参数并将标志存储为 bool 选项。然后我检查哪个标志设置为 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 以从中读取一些信息。目前实现为:
if args.flag == True:
array_out = flag(array_read_from_input)
if args.outputname == None:
name = 'Flag.tif'
有可能subclass argparse让 action 关键字调用一个函数。
是否可以解析 input_data 选项,执行一些处理,然后调用标志函数而无需为每个参数嵌套 if 循环,例如,通过子类化 argparse 的 action 参数?
最佳答案
Is it possible to parse the input_data option, perform some processing, and then call the flag function without having nested if loops for each argument, eg., by subclassing argparse's action parameter?
根据您的问题;
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')
关于python - argparse 在解析其他选项后调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591097/