gpt4 book ai didi

python - 按字母顺序对 argparse 帮助进行排序

转载 作者:IT老高 更新时间:2023-10-28 21:02:16 29 4
gpt4 key购买 nike

我正在使用 Python 的 (2.7) argparse 工具,并希望自动按选项按字母顺序对它生成的帮助进行排序。

默认情况下,帮助条目按添加顺序排序*,如下所示:

p = argparse.ArgumentParser(description='Load duration curves and other plots')
p.add_argument('--first', '-f', type=int, default=1, help='First Hour')
p.add_argument('--dur', '-d', type=int, default=-1, help='Duration in Hours. Use -1 for all')
p.add_argument('--title', '-t', help='Plot Title (for all plots), default=file name')
p.add_argument('--interp', '-i', action="store_true", default=True,
help='Use linear interpolation for smoother curves')
...
args = p.parse_args()

当调用 python script -h 时会产生:

usage: script.py [-h] [--first FIRST] [--dur DUR] [--title TITLE] [--interp]

Load duration curves and other plots

optional arguments:
-h, --help show this help message and exit
--first FIRST, -f FIRST
First Hour
--dur DUR, -d DUR Duration in Hours. Use -1 for all
--title TITLE, -t TITLE
Plot Title (for all plots), default=file name
--interp, -i Use linear interpolation for smoother curves

是否可以自动按字母顺序对它们进行排序?这将是 dur, first, h, interp, title。

*显然,解决方法是通过使用 p.add_argument 按字母顺序添加条目来手动维护,但我试图避免这样做。

最佳答案

您可以通过提供自定义 HelpFormatter class 来做到这一点;其中的内部结构没有正式记录。这意味着您在 Python 版本与版本之间的兼容性方面是靠自己的,但我发现界面相当稳定:

from argparse import HelpFormatter
from operator import attrgetter

class SortingHelpFormatter(HelpFormatter):
def add_arguments(self, actions):
actions = sorted(actions, key=attrgetter('option_strings'))
super(SortingHelpFormatter, self).add_arguments(actions)


p = argparse.ArgumentParser(...
formatter_class=SortingHelpFormatter,
)

我在这里对选项字符串(('--dur', '-d') 等)进行排序,但您可以选择要排序的内容。这个简单的排序选项将单破折号选项放在最后,如 -h 选项。

哪个输出:

usage: [-h] [--first FIRST] [--dur DUR] [--title TITLE] [--interp]

Load duration curves and other plots

optional arguments:
--dur DUR, -d DUR Duration in Hours. Use -1 for all
--first FIRST, -f FIRST
First Hour
--interp, -i Use linear interpolation for smoother curves
--title TITLE, -t TITLE
Plot Title (for all plots), default=file name
-h, --help show this help message and exit

关于python - 按字母顺序对 argparse 帮助进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268602/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com