gpt4 book ai didi

Python 2.7 参数解析 : How to nest optional mutally exclusive arguments properly?

转载 作者:太空狗 更新时间:2023-10-29 17:49:24 24 4
gpt4 key购买 nike

我的程序应该包括以下选项,由 argparse 正确解析:

  1. 完全可选:[-h, --help][-v, --version]
  2. 互斥:[-f FILE, --file FILE][-u URL, --url URL]
  3. 如果选择了 --url,则可选:[-V, --verbose]
  4. 如果选择了 --file--url 则需要:[-F, --format FORMAT]

所需的使用模式是:

prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]

-F 要求适用于互斥组的两个成员。
不确定它是否是 positional .

所以应该可以运行:

prog.py -u "http://foo.bar" -V -F csv

如果我忘记了 -F 解析器会尖叫(他应该这样做)。

到目前为止我做了什么:

parser = ArgumentParser(decription='foo')

group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')

parser.add_argument('-V','--verbose', action='store_true', default=False, help='')
parser.add_argument('-F','--format', nargs=1, type=str, help='')

由于它有一个“普通模式”可以在没有命令行参数的情况下运行,所以所有参数都必须是可选的。

如何在我的代码中实现第 3 点和第 4 点?

编辑:
我尝试将 -f-u 作为子解析器,如 here 所述, 但子命令似乎被视为位置命令,如果我在没有参数的情况下运行它,解析器会给我一个 error: too few arguments

最佳答案

使用 nargs=2 和 tuple metavar 接近您的目标

parser = argparse.ArgumentParser(prog='PROG')
group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=2, metavar=('FILE','FORMAT'))
group.add_argument('-u','--url', nargs=2, metavar=('URL','FORMAT'))
parser.add_argument('-V','--verbose', action='store_true',help='optional with url')

产生:

usage: PROG [-h] [-f FILE FORMAT | -u URL FORMAT] [-V]

optional arguments:
-h, --help show this help message and exit
-f FILE FORMAT, --file FILE FORMAT
-u URL FORMAT, --url URL FORMAT
-V, --verbose optional with url

这需要格式以及文件名或 url,只是不需要 -F。正如其他人指出的那样,-V-f 情况下可以忽略。


I tried -f and -u as subparsers, as described here, but subcommands seem to be treated like positionals and the parser gives me an error: too few arguments if i run it without arguments.

在最新版本中,子命令不再被视为必需的位置。据我所知,这是将错误消息更改为提供更多信息的副作用。而不是 _parse_known_args 做一个:

    if positionals:
self.error(_('too few arguments'))

它扫描 _actions 以查看哪些是必需的,然后在错误消息中按名称列出它们。这在 http://bugs.python.org/issue9253 中讨论.我知道这个变化正在开发中(3.4),也可能在 3.3 中。


关于Python 2.7 参数解析 : How to nest optional mutally exclusive arguments properly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com