【问题标题】:Getting a list of custom structures from command line with argparse使用 argparse 从命令行获取自定义结构列表
【发布时间】:2020-04-22 09:48:02
【问题描述】:

所以我有类Foo,它包含3个字段:整数startend和字符串name

我想从 argparse 中获取Foos 的列表,使用类似的输入

my_program --foo 5 7 first --foo 10 12 second.

parser.add_argument('--foo', action='append', default=[], nargs=2) 非常接近,它将返回列表列表[['5', '7', 'first'], ['10', '12', 'second']]

我尝试添加 type=Foo,但它尝试转换每个参数。
[[Foo('5'), Foo('7'), Foo('first')], ...] 我想在 argparse 中执行转换 + 验证。有可能吗?

【问题讨论】:

  • 您也许可以使用自定义 Action 子类来做到这一点。这会看到完整的值列表。正如您所发现的,type 分别应用于每个字符串。但通常在解析后进行自己的验证和转换会更简单。

标签: python python-3.x command-line-arguments argparse


【解决方案1】:

这就是你要找的吗?作为记录,我同意在解析后进行验证更容易和更清晰。

import argparse


class foo():
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

class CustomAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        foos.append(foo(*values))

foos = []
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action=CustomAction, default=[], nargs=3)
parser.parse_args()

for x in foos:
    print(x.a, x.b, x.c)

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 2016-05-02
    • 2011-06-02
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2014-05-21
    相关资源
    最近更新 更多