【问题标题】:Python argparse - help text for long argument namePython argparse - 长参数名称的帮助文本
【发布时间】:2021-08-13 16:52:45
【问题描述】:

Python 'argparse' 在一个新行上显示长命名参数的帮助文本:

**#script.py -h

Select one of the options given


optional arguments:
  -h, --help            show this help message and exit
  -bs , --business_service 
                        choose the service     << New line
  -so , --service_offering 
  -ci , --cmdb_ci       provide configuration item
  -desc , --description 
                        write description     << New line

下面是我正在使用的代码:

self.parser = argparse.ArgumentParser(
            description='Select one of the options given',
            epilog=self._get_usage(),
            formatter_class=argparse.RawTextHelpFormatter
            )


        self.parser.add_argument('-bs','--business_service',type=str,help='choose the service',metavar='')
        self.parser.add_argument('-so','--service_offering',type=str,metavar='')
        self.parser.add_argument('-ci','--mdcb_ci',type=str,help='provide configuration item',metavar='')
        self.parser.add_argument('-desc','--description',type=str,help='write description',metavar='')

我希望帮助字符串位于参数的同一行:

-bs , --business_service     choose the service     << Same line

我该如何解决?

【问题讨论】:

  • 如果不深入挖掘 argparse 库,可能不会……如果帮助文本的格式对您来说很重要,docopt 可能是您更好的选择。
  • 缩短长选项名称是迄今为止最简单的解决方案。

标签: python command-line-arguments argparse


【解决方案1】:

HelpFormatter 类采用 max_help_position 参数。默认值为 24,这是您在帮助中看到的。

它可以通过新的 Formatter 子类进行更改,或修改调用参数。

In [23]: parser.formatter_class = 
    lambda prog: argparse.RawTextHelpFormatter(prog, max_help_position=30)

我在这里修改了 formatter_class 属性,但您可以使用 lambda 行代替

formatter_class=argparse.RawTextHelpFormatter

结果是:

In [24]: parser.print_help()
usage: ipython3 [-h] [-bs] [-so] [-ci] [-desc]

Select one of the options given

optional arguments:
  -h, --help                 show this help message and exit
  -bs , --business_service   choose the service
  -so , --service_offering 
  -ci , --mdcb_ci            provide configuration item
  -desc , --description      write description

选择这样的参数是为了平衡显示的整体宽度和易读性。可以像这样调整它们,但它确实需要一些 Python 编程知识。我这样做已经有一段时间了,所以我的建议可能不是最简单的。但大体上是朝着正确的方向发展的。

使用partial 包装器设置它的另一种方式:

In [42]: from functools import partial
In [43]: newformatter=partial(argparse.HelpFormatter, max_help_position=30)
In [44]: parser.formatter_class=newformatter

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2013-04-10
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2012-10-16
    相关资源
    最近更新 更多