小编GH0*_*05T的帖子

argparse:如何要求一组并非全部互斥且并非全部可选的 args?

我试图在argparse. 但是,我有两个问题:

  1. 并非所有的论点都是相互排斥的。
  2. 即使它们都是互斥的,互斥组也要求参数是可选的,并且主函数search(不是必需的)使用位置参数。

理想情况下,我认为'search'是主要功能。因此,我希望它的参数是位置性的;虽然,search不是必需的。但是,至少需要以下一项: search, --name, --list, --add, --import, --encrypt, --decrypt, --delete-database, --rename-database, --backup

另外,--name不是相互排斥的选项,它是那种多用途:

  • 如果它被自身调用,并且它的参数(数据库的名称)不存在,则将创建它。
  • 如果(数据库)确实存在,则将其用作调用它的任何其他选项函数的参数:例如, -n myfirstdb --decrypt
  • 而如果--name不存在,我假设最近访问的数据库。

目前,我必须运行一个开始变得繁重的检查,以查看是否调用了任何主要选项,并测试是否--name存在。

最后,显然互斥的选项不能一起使用。

我怎样才能search成为这个必需的互斥群体的一部分?我怎样才能成为--name这个必需的组中的一个,但又不与其中任何一个互斥?

我正在试验子解析器,但我不确定它们是否能解决我的问题。任何建议都可能为我节省几天的反复试验时间,非常感谢。

parser.add_argument(
    'search', nargs='*', type=str, metavar='S', help='search [field] for string(s)')
parser.add_argument(
    '--name', '-n', type=str, help='name of the database; created if does not exist')

main_ex_group = parser.add_argument_group(
    title='main functions').add_mutually_exclusive_group()
main_ex_group.add_argument(
    '--list', '-l', action='store_true', help='list …
Run Code Online (Sandbox Code Playgroud)

python command-line command-line-arguments argparse python-3.x

0
推荐指数
1
解决办法
1596
查看次数