gpt4 book ai didi

python - Argparse 和 ArgumentDefaultsHelpFormatter。选择 sys.stdin/stdout 作为默认值时的默认值格式

转载 作者:太空狗 更新时间:2023-10-29 21:39:19 24 4
gpt4 key购买 nike

我对使用 argparse 的 ArgumentDefaultsHelpFormatter 类格式化程序很感兴趣(我的程序有几个子命令)。默认情况下,输入和输出参数分别设置为 sys.stdin 和 sys.stdout。但是,这两个参数的格式可能会让用户有点困惑(例如(默认值:', mode 'r' at 0x10028e0c0>)。有没有一种方法可以专门轻松地更改这两个参数的输出格式以获得像“默认:STDIN”或“默认:STDOUT”之类的东西?

谢谢

import sys
import argparse

parser = argparse.ArgumentParser(prog='PROG',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('--infile',
'-i',
metavar='File',
help='The input file/stream.',
default=sys.stdin,
type=argparse.FileType('r'),
required=False)

parser.add_argument('--outfile',
'-o',
metavar='File',
help='The output file/stream.',
default=sys.stdout,
type=argparse.FileType('r'),
required=False)

parser.add_argument('--whatever-arg',
'-w',
type=str,
default='any',
help='Change something',
required=False)


args = parser.parse_args()
parser.print_help()

给出:

usage: PROG [-h] [--infile File] [--outfile File]
[--whatever-arg WHATEVER_ARG]

optional arguments:
-h, --help show this help message and exit
--infile File, -i File
The input file/stream. (default: <open file '<stdin>',
mode 'r' at 0x10028e0c0>)
--outfile File, -o File
The output file/stream. (default: <open file
'<stdout>', mode 'w' at 0x10028e150>)
--whatever-arg WHATEVER_ARG, -w WHATEVER_ARG
Change something (default: any)

最佳答案

您可以子类化 ArgumentDefaultsHelpFormatter 来执行您想要的操作。

from argparse import ArgumentDefaultsHelpFormatter,RawDescriptionHelpFormatter

class CustomFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter):
def _get_help_string(self, action):
help = action.help
if '%(default)' not in action.help:
if action.default is not argparse.SUPPRESS:
defaulting_nargs = [argparse.OPTIONAL, argparse.ZERO_OR_MORE]
if action.option_strings or action.nargs in defaulting_nargs:
if type(action.default) == type(sys.stdin):
print action.default.name
help += ' (default: ' + str(action.default.name) + ')'
else:
help += ' (default: %(default)s)'
return help

parser = argparse.ArgumentParser(prog='PROG', formatter_class=CustomFormatter)

我的结果是:

optional arguments:
-h, --help show this help message and exit
--infile File, -i File
The input file/stream. (default: <stdin>)
--outfile File, -o File
The output file/stream. (default: <stdout>)
--whatever-arg WHATEVER_ARG, -w WHATEVER_ARG
Change something (default: any)

关于python - Argparse 和 ArgumentDefaultsHelpFormatter。选择 sys.stdin/stdout 作为默认值时的默认值格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34544752/

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