【问题标题】:Python argparse allow combined flagsPython argparse 允许组合标志
【发布时间】:2014-02-12 16:54:03
【问题描述】:

argparse 是否可以像这样解析组合标志:

app.py -bcda something

在这种情况下,我希望将 something 设置为 -a,其余的将存储为 True。基本上:

app.py -b -c -d -a something

我知道大多数程序都允许这样做,例如grep -rEw,但是使用 argparse 做到这一点有多难?

【问题讨论】:

  • 正如 Chris Barker 所说,答案是使用 -bcda 而不是 -abcd。组合是开箱即用的东西。

标签: python command-line-arguments argparse


【解决方案1】:

您可以使用 store_const 实现此目的:

parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_const', const=True, default=False)
parser.add_argument('-b', action='store_const', const=True, default=False)
args = parser.parse_args()

然后您可以使用-a -b-ab(或-a-b)从命令行调用它。

编辑:如果您希望其中一个标志接受参数,则需要将其作为链的最后一项传递。所以如果a 需要一个参数,你需要做-bcda something

【讨论】:

  • action='store_true 更简洁。
【解决方案2】:

这是我通过谷歌搜索发现的:

几个短选项可以连接在一起,只使用一个 - 前缀,只要只有最后一个选项(或没有一个)需要 价值:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-x', action='store_true')
>>> parser.add_argument('-y', action='store_true')
>>> parser.add_argument('-z')
>>> parser.parse_args('-xyzZ'.split())
Namespace(x=True, y=True, z='Z')

http://docs.python.org/dev/library/argparse.html#option-value-syntax

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 2020-04-13
    • 1970-01-01
    • 2012-07-15
    • 2017-08-30
    • 2016-04-16
    • 2020-11-29
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多