【问题标题】:argparse call a function after parsing other optionsargparse 解析其他选项后调用函数
【发布时间】:2012-11-15 11:30:03
【问题描述】:

目前,我使用 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!')

在调用 flag 函数之前,我必须打开 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 选项,执行一些处理,然后调用 flag 函数,而无需为每个参数嵌套 if 循环,例如,通过子类化 argparse 的 action 参数?

【问题讨论】:

  • 不要将对象与TrueNone 进行比较。要么使用is,要么使用对象的真值(因此它应该是if args.flag: ...if args.outputname is None)。另外,您知道您可以创建自定义操作吗?只需阅读 argparse 文档。
  • @Bakuriu “可以将 argparse 子类化以使 action 关键字调用函数。”问题不在于是否可以创建自定义操作,而是在解析和操作其他参数后是否可以调用该操作。
  • 如果你想在解析后调用它,那么我不明白argparse与你的问题有什么关系。该模块仅用于解析命令行并最终在解析期间执行操作。另外,我不明白双 if 有什么问题。作为旁注:没有什么禁止您使用 parser 的子类并重新实现 parse_args 以便在此处调用该函数,但您仍然必须在此处放置一个双 if
  • @Bakuriu 如果在解析期间执行操作,我可以返回一个对象以传递给另一个参数以在解析期间使用吗?问题不在于单个 double if,而是具有 25 个以上标志的实现。一个大的代码块专门用于 if 语句,如果可能的话,我想将其删除为多余的。
  • 我不认为你可以“返回一个对象”,但是创建一个自定义操作,你可以使用Namespace 和解析器做任何你想做的事情,而不是从你的函数返回值可以将它们放在命名空间中。无论如何,也许提供一个稍微复杂一点的例子,它更像你想做的事情可能会帮助我们意识到你可以做什么。

标签: python python-2.7 argparse


【解决方案1】:

是否可以解析 input_data 选项,执行一些 处理,然后调用 flag 函数而不嵌套 if 每个参数的循环,例如,通过子类化 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2020-09-03
    • 2013-12-21
    • 2018-07-25
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多