首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在argparse帮助文本中插入换行符?

如何在argparse帮助文本中插入换行符?
EN

Stack Overflow用户
提问于 2010-10-04 16:40:00
回答 8查看 114.7K关注 0票数 416

我正在使用

在Python 2.7中

用于解析输入选项。我的一个选择是多项选择。我想在它的帮助文本中列出一个列表,例如

代码语言:javascript
复制
from argparse import ArgumentParser

parser = ArgumentParser(description='test')

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

然而,

删除所有换行符和连续空格。结果看起来像

代码语言:javascript
复制
~/Downloads:52$ python2.7 x.py -h
usage: x.py [-h] [-g {a,b,g,d,e}]

test

optional arguments:
  -h, --help      show this help message and exit
  -g {a,b,g,d,e}  Some option, where a = alpha b = beta g = gamma d = delta e
                  = epsilon

如何在帮助文本中插入换行符?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-04 16:49:57

尝试使用

代码语言:javascript
复制
from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)
票数 490
EN

Stack Overflow用户

发布于 2014-03-04 04:49:56

如果只想覆盖one选项,则不应使用

..。相反,子类化

并为应该"raw“处理的选项提供一个特殊的介绍(我使用

):

代码语言:javascript
复制
import argparse

class SmartFormatter(argparse.HelpFormatter):

    def _split_lines(self, text, width):
        if text.startswith('R|'):
            return text[2:].splitlines()  
        # this is the RawTextHelpFormatter._split_lines
        return argparse.HelpFormatter._split_lines(self, text, width)

并使用它:

代码语言:javascript
复制
from argparse import ArgumentParser

parser = ArgumentParser(description='test', formatter_class=SmartFormatter)

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="R|Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

任何其他调用

帮助不是以

将被正常包装。

这是

我对argparse的改进

..。完整的SmartFormatter还支持将默认值添加到所有选项,以及实用程序描述的原始输入。完整版有它自己的

方法,这样对版本字符串所做的任何格式化操作都会被保留:

代码语言:javascript
复制
parser.add_argument('--version', '-v', action="version",
                    version="version...\n   42!")
票数 90
EN

Stack Overflow用户

发布于 2016-04-21 04:39:15

另一种简单的方法是包含

textwrap

..。

例如,

代码语言:javascript
复制
import argparse, textwrap
parser = argparse.ArgumentParser(description='some information',
        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 ... '''))

通过这种方式,我们可以避免在每一个输出行前面有很长的空格。

代码语言:javascript
复制
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 ...
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3853722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档