python argparse帮助显示中的多行

2024-04-19 14:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用argparse in Python2.7,我想在参数的帮助文本中显示多行。

我的代码如下:

import argparse

parser = argparse.ArgumentParser(description='details',
        usage='use "%(prog)s --help" for more information')

parser.add_argument('--argument', default=None, type=sometype,
        help='''
             First line  \n
             Second line \n
             \n
             More lines  \n
             ''')

我想在调用--help时将帮助消息打印成多行。但是,输出如下所示。

First line Second line More lines

我知道我可以把每一行的字符串加起来解决这个问题。

parser.add_argument('--argument', default=None, type=sometype,
        help='First line  \n' +
             'Second line \n' +
             '\n'             + 
             'More lines')

但是我想在帮助文本中添加几十行。我想知道有没有一种方便的方法可以将帮助文本分成多行?

而且,在帮助消息的一行中可以显示的字符数似乎有一个上限,在我的情况下是54。这一限额制度是否依赖,是否有办法提高上限?


Tags: 文本noneadddefaultparsermoretypeline
0条回答
网友
1楼 · 发布于 2024-04-19 14:16:58

默认帮助格式化程序重新包装行以适合您的终端(它查看COLUMNS环境变量以确定输出宽度,默认值为总共80个字符)。

^{} section

By default, ArgumentParser objects line-wrap the description and epilog texts in command-line help messages.

请改用RawTextHelpFormatter类来指示您已经包装了行:

RawTextHelpFormatter maintains whitespace for all sorts of help text, including argument descriptions.

你的代码看起来像:

parser = argparse.ArgumentParser(description='details',
        usage='use "%(prog)s --help" for more information',
        formatter_class=argparse.RawTextHelpFormatter)

注意不要添加太多的换行符;三引号字符串包括留在字符串中的换行符。因此,您不需要\n字符:

>>> import argparse
>>> parser = argparse.ArgumentParser(description='details',
...         usage='use "%(prog)s --help" for more information',
...         formatter_class=argparse.RawTextHelpFormatter)
>>> parser.add_argument('--argument', default=None,
...         help='''
...              First line
...              Second line
... 
...              More lines
...              ''')
_StoreAction(option_strings=['--argument'], dest='argument', nargs=None, const=None, default=None, type=None, choices=None, help='\n             First line\n             Second line\n\n             More lines\n             ', metavar=None)
>>> parser.print_help()
usage: use " --help" for more information

details

optional arguments:
  -h, --help           show this help message and exit
  --argument ARGUMENT  
                                    First line
                                    Second line

                                    More lines
网友
2楼 · 发布于 2024-04-19 14:16:58

最简单的方法是将行放在数组中,然后用这样的新行连接它们:

help_lines = ['First line', 'Second line', '', 'More lines']
# ...
parser.add_argument('--argument', default=None, type=sometype,
help='\n'.join(help_lines))
网友
3楼 · 发布于 2024-04-19 14:16:58

另一个简单的方法是包含textwrap

例如

import argparse, textwrap
parser = argparse.ArgumentParser(description='Prepare input file',
        usage='use "python %(prog)s --help" for more information',
        formatter_class=argparse.RawTextHelpFormatter)

parser.add_argument('--argument', default=somedefault, type=sometype,
        help= textwrap.dedent('''\
        First line
        Second line
        More lines ...
         '''))

这样,我们可以避免每个输出线前面的长的空白空间。

usage: use "python your_python_program.py --help" for more information

Prepare input file

optional arguments:
-h, --help            show this help message and exit
--argument ARGUMENT
                      First line
                      Second line
                      More lines ...

相关问题 更多 >