替代 argparse 和 optparse 的子命令 [英] Subcommand alternative to argparse and optparse

查看:35
本文介绍了替代 argparse 和 optparse 的子命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于子命令的 argparse/optparse 是否有任何直观的替代方案?它们都很糟糕——要么是疯狂的配置,要么是疯狂的输出.

真实世界示例(被盗,不想要):

<预><代码>>>>解析器 = argparse.ArgumentParser()>>>subparsers = parser.add_subparsers(title='subcommands',... description='有效的子命令',... help='附加帮助')>>>subparsers.add_parser('foo')>>>subparsers.add_parser('bar')>>>parser.parse_args(['-h'])用法:[-h] {foo,bar} ...可选参数:-h, --help 显示此帮助信息并退出子命令:有效的子命令{foo,bar} 额外帮助

通缉:

<预><代码>>>>解析器 = cmdline.Parser(... tplheader='用法:工具 [命令] [选项]',... tplcommandhead='可用命令:',... tplfooter='使用 \"tool help\" 获取支持的命令的完整列表.')>>>parser.add('foo', help='foo.')>>>parser.add('bar', help='bar.')>>>parser.parse(['-h'])用法:工具 [命令] [选项]可用命令:噗噗.酒吧吧.使用工具帮助"获取支持的命令的完整列表.

更新:我会接受提供命令验证和解析示例的答案,该示例提供与最后一个片段完全相同的帮助消息.

解决方案

只需稍微更改 argparse 代码,您就可以非常接近您请求的输出:

  1. 通过将 usage 参数指定为 ArgumentParser 来设置用法文本.
  2. 省略add_subparsersdescriptionhelp 参数.
  3. title 参数更改为 Available subcommands.
  4. 使用 metavar 参数覆盖难看的 {foo,bar} 文本.
  5. 使用 add_parser 中可用的 help 参数.

这是成品:

导入 argparseparser = argparse.ArgumentParser(usage='tool [command] [options]')subparsers = parser.add_subparsers(title='可用命令', metavar='')subparsers.add_parser('foo', help='foo.')subparsers.add_parser('bar', help='bar.')parser.parse_args(['-h'])

该代码打印:

<前>用法:工具 [命令] [选项]可选参数:-h, --help 显示此帮助信息并退出可用命令:噗噗.酒吧吧.

Is there any intuitive alternative for argparse/optparse for subcommands? They both are bad - it is either insane config or insane output.

Real world example (stolen, not wanted):

>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(title='subcommands',
...                                    description='valid subcommands',
...                                    help='additional help')
>>> subparsers.add_parser('foo')
>>> subparsers.add_parser('bar')
>>> parser.parse_args(['-h'])
usage:  [-h] {foo,bar} ...

optional arguments:
  -h, --help  show this help message and exit

subcommands:
  valid subcommands

  {foo,bar}   additional help

Wanted:

>>> parser = cmdline.Parser(
...   tplheader='Usage: tool [command] [options]',
...   tplcommandhead='Available commands:',
...   tplfooter='Use \"tool help\" to get full list of supported commands.')
>>> parser.add('foo', help='foo.')
>>> parser.add('bar', help='bar.')
>>> parser.parse(['-h'])
Usage: tool [command] [options]
Available commands:

  foo        foo.
  bar        bar.

Use "tool help" to get full list of supported commands.

UPDATE: I would accept the answer that provides command validation and parsing example that gives the help message exactly as the last snippet.

解决方案

You can get pretty close to your requested output just by changing your argparse code a little bit:

  1. Set the usage text by specifying the usage parameter to ArgumentParser.
  2. Omit the description and help arguments to add_subparsers.
  3. Change the title parameter to Available subcommands.
  4. Use the metavar parameter to override the unsightly {foo,bar} text.
  5. Use the help arguments available in add_parser.

Here's the finished product:

import argparse
parser = argparse.ArgumentParser(usage='tool [command] [options]')
subparsers = parser.add_subparsers(title='Available commands', metavar='')
subparsers.add_parser('foo', help='foo.')
subparsers.add_parser('bar', help='bar.')
parser.parse_args(['-h'])

That code prints this:

usage: tool [command] [options]

optional arguments:
  -h, --help  show this help message and exit

Available commands:

    foo       foo.
    bar       bar.

这篇关于替代 argparse 和 optparse 的子命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆