python - argparse 在解析其他选项后调用一个函数

标签 python python-2.7 argparse

目前,我正在使用 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/

相关文章:

python - Curl 有效但 Python 请求无效

python - 从 Amazon S3 迁移到 Azure 存储(Django Web 应用程序)

Python:如何将 2.7 模块导入 3.4 程序?

python - 如何将切片对象的负索引解析为 argparse.ArgumentParser

python - 使用 argparse 获取包含 "or ' 的输入

python - ArgumentParser -h 在 parse_known_args 之后不打印选项

python - 如何优化 (3*O(n**2)) + O(n) 算法?

python - 仅在数据框中填充缺失值( Pandas )

python - 如何用 OneVsRestClassifier 做 GridSearchCV?

python - 如何让 argparse 检查互斥的参数组