Python argparse:如何在子解析器的帮助文本中插入换行符?

13 投票
1 回答
6950 浏览
提问于 2025-04-17 19:46

这个问题和之前提到的一个问题有关,但可能不完全相同。问题是:在下面这个(可以正常工作的)例子中,如何在使用子解析器时,在帮助文本中使用换行?

import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)

subparsers = parser.add_subparsers()

parser_start = subparsers.add_parser('stop')
parser_start.add_argument("file", help = "firstline\nnext line\nlast line")

print parser.parse_args()

我的输出结果如下:

tester.py  stop -h
usage: tester.py stop [-h] file

positional arguments:
  file        firstline next line last line

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

对于file的帮助信息,期望的输出应该是:

first line
next line
last line

1 个回答

13

subparsers.add_parser()这个方法和argparse.ArgumentParser()的构造函数用的是一样的参数。所以,如果你想在子解析器中使用RawTextHelpFormatter,你需要在添加子解析器的时候明确设置formatter_class

>>> import argparse
>>> parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
>>> subparsers = parser.add_subparsers()

把这一行改成设置子解析器的formatter_class

>>> parser_start = subparsers.add_parser('stop', formatter_class=argparse.RawTextHelpFormatter)

现在,你的帮助文本里会包含换行符:

>>> parser_start.add_argument("file", help="firstline\nnext line\nlast line")
_StoreAction(option_strings=[], dest='file', nargs=None, const=None, default=None, type=None, choices=None, help='firstline\nnext line\nlast line', metavar=None)

>>> print parser.parse_args(['stop', '--help'])
usage:  stop [-h] file

positional arguments:
  file        firstline
              next line
              last line

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

撰写回答