【问题标题】:How can I collect two options each with multiple arguments in Python's argparse module?如何在 Python 的 argparse 模块中收集两个选项,每个选项都有多个参数?
【发布时间】:2013-09-21 21:20:25
【问题描述】:

我想解析两个长命令行选项——一个文件列表和一个类似这样的命令:

python example.py file1 file2 -- echo hello world

结果:

>>> args.filenames
["file1", "file2"]
>>> args.command
["echo", "hello", "world"]

这在 argparse 或任何其他 python CLI 库(例如 docopt)中是否可行?

【问题讨论】:

    标签: python python-2.7 argparse docopt


    【解决方案1】:

    在 argparse 中,-- 表示将后面的所有内容视为位置字符串。但是您的示例中的所有字符串看起来都是这样,所以 -- 什么都不做。所以剩下的问题是,argparse 假设如何将 5 个字符串分配给 2 个参数。如果您总是想要 2 个“文件”,nargs=2narg='*' 就可以解决问题。 +REMAINDER (...) 也适用于第二次。

    * 后跟 * 不起作用。这类似于'(a*)(a*)' 的正则表达式模式。事实上 argparse 使用 RegEx 模式匹配将字符串分配给位置参数。创建 2 个参数并尝试各种 nargs 值可能很有启发性。

    另一种选择是将-- 替换为可选参数,例如-cnargs='*'

    【讨论】:

      【解决方案2】:
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs='*')
      >>> parser.add_argument('--bar', nargs='*')
      >>> parser.parse_args('--foo x y --bar 1 2'.split())
      Namespace(bar=['1', '2'], foo=['x', 'y'])
      

      对于您的文件参数,您还可以使用type=argparse.FileType('w')type=argparse.FileType('r'),它会在解析输入时为您创建文件对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 2017-11-28
        • 2018-12-25
        • 2021-03-03
        • 2011-01-18
        • 1970-01-01
        • 2019-01-28
        相关资源
        最近更新 更多