如何使用 argparse 更改子解析器的格式
How to change the format of subparser with argparse
我知道有 max_help_position 用于使用构造函数创建的主解析器,但是如何更改子解析器格式,因为有时我有很长的命令名称,我希望帮助消息与其对齐。
#!/usr/bin/env python
import argparse
import subprocess
parser = argparse.ArgumentParser(description="example",
formatter_class=argparse.RawDescriptionHelpFormatter)
subparsers = parser.add_subparsers(title="available commands",metavar="command [options ...]")
parser1 = subparsers.add_parser('short-cmd', help='help message')
parser1.add_argument('--path')
parser2 = subparsers.add_parser('very-long-long-name-for-a-command', help='help message')
parser2.add_argument('--path')
args = parser.parse_args()
输出:
usage: test.py [-h] command [options ...] ...
example
optional arguments:
-h, --help show this help message and exit
available commands:
command [options ...]
short-cmd create a directory for database
very-long-long-name-for-a-command
create a directory for database
我想要什么:
usage: test.py [-h] command [options ...] ...
example
optional arguments:
-h, --help show this help message and exit
available commands:
command [options ...]
short-cmd create a directory for database
very-long-long-name-for-a-command create a directory for database
您正确地注意到有一个 max_help_position
控制 help
行的缩进。 HelpFormatter
__init__
中的默认值为 24
.
但诀窍是改变这一点。
一种方法是继承 HelpFormatter
(或者 Raw... 如果需要的话)。
class MyFormatter(argparse.HelpFormatter):
def __init__(self,prog):
super(MyFormatter,self).__init__(prog,max_help_position=55)
parser=argparse.ArgumentParser(formatter_class=MyFormatter)
理论上,您可以创建或修改 formatter
:
formatter = argparse.HelpFormatter(`prog`, max_help_position=40)
或
formatter = argparse.HelpFormatter('prog')
formatter._max_help_position = 45
但要做到这一点,您必须调整此调用树中的某个位置:
`-h`
parser.print_help()
parser.format_help()
parser._get_formatter()
parser.formatter_class(prog=self.prog)
(如果您认为我删除了一些有用的内容,请查看我的编辑历史记录)。
我知道有 max_help_position 用于使用构造函数创建的主解析器,但是如何更改子解析器格式,因为有时我有很长的命令名称,我希望帮助消息与其对齐。
#!/usr/bin/env python
import argparse
import subprocess
parser = argparse.ArgumentParser(description="example",
formatter_class=argparse.RawDescriptionHelpFormatter)
subparsers = parser.add_subparsers(title="available commands",metavar="command [options ...]")
parser1 = subparsers.add_parser('short-cmd', help='help message')
parser1.add_argument('--path')
parser2 = subparsers.add_parser('very-long-long-name-for-a-command', help='help message')
parser2.add_argument('--path')
args = parser.parse_args()
输出:
usage: test.py [-h] command [options ...] ...
example
optional arguments:
-h, --help show this help message and exit
available commands:
command [options ...]
short-cmd create a directory for database
very-long-long-name-for-a-command
create a directory for database
我想要什么:
usage: test.py [-h] command [options ...] ...
example
optional arguments:
-h, --help show this help message and exit
available commands:
command [options ...]
short-cmd create a directory for database
very-long-long-name-for-a-command create a directory for database
您正确地注意到有一个 max_help_position
控制 help
行的缩进。 HelpFormatter
__init__
中的默认值为 24
.
但诀窍是改变这一点。
一种方法是继承 HelpFormatter
(或者 Raw... 如果需要的话)。
class MyFormatter(argparse.HelpFormatter):
def __init__(self,prog):
super(MyFormatter,self).__init__(prog,max_help_position=55)
parser=argparse.ArgumentParser(formatter_class=MyFormatter)
理论上,您可以创建或修改 formatter
:
formatter = argparse.HelpFormatter(`prog`, max_help_position=40)
或
formatter = argparse.HelpFormatter('prog')
formatter._max_help_position = 45
但要做到这一点,您必须调整此调用树中的某个位置:
`-h`
parser.print_help()
parser.format_help()
parser._get_formatter()
parser.formatter_class(prog=self.prog)
(如果您认为我删除了一些有用的内容,请查看我的编辑历史记录)。