【问题标题】:Set line length for output in Python's argparse在 Python 的 argparse 中设置输出的行长
【发布时间】:2021-05-04 15:57:19
【问题描述】:

目前我正在使用以下代码来初始化我的ArgumentParser

parser = argparse.ArgumentParser(description="Help line 1\n" +
                                             "Help line 2",
                                 formatter_class=argparse.RawTextHelpFormatter)

添加一些参数后,它会给出以下输出:

/usr/bin/python3.6 /data/Poseidon/dev/Python/trident.py -h
usage: trident.py [-h] [--verbose] [--images] --source SOURCE --network
                  NETWORK

Help line 1
Help line 2

我宁愿在下一行的帮助输出的“使用”部分中没有“网络”参数,而是在同一行。有没有办法告诉argparse不要在参数列表中添加换行符?

【问题讨论】:

    标签: python python-3.x argparse


    【解决方案1】:

    试试这个:

    parser = argparse.ArgumentParser(description="Help line 1\n" +
                                                 "Help line 2",
                                     formatter_class=lambda prog: argparse.RawTextHelpFormatter(prog, width=99999))
    

    如果您这样做,请注意来自HelpFormatter.__doc__ 的这条评论:

    只有此类的名称被视为公共 API。该类提供的所有方法都被视为实现细节。

    【讨论】:

    • 谢谢,这对我有用。至于记录,根据this answer,另一种方法是设置COLUMNS环境变量。
    【解决方案2】:

    更好的分辨率(与https://stackoverflow.com/a/53283500/10418734相比)是

    1. 创建一个具有所需宽度的类
    class _WidthFormatter(argparse.RawTextHelpFormatter):
        def __init__(self, prog: Text) -> None:
            super().__init__(prog, width=99999)
    
    1. 并使用类
    parser = argparse.ArgumentParser(
        description=(
            "Help line 1\n"
            "Help line 2"
        ),
        formatter_class= _WidthFormatter
    )
    

    此解决方案是首选,因为 argparse.ArgumentParser 中的 formatter_class 参数希望使用类,而不是类实例。

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2012-12-30
      • 2021-11-25
      • 1970-01-01
      • 2016-11-23
      • 2015-06-28
      相关资源
      最近更新 更多