Argparse和ArgumentDefaultsHelpFormatter.选择sys.stdin/stdout作为默认值时的默认值格式 [英] Argparse and ArgumentDefaultsHelpFormatter. Formatting of default values when sys.stdin/stdout are selected as default

查看:445
本文介绍了Argparse和ArgumentDefaultsHelpFormatter.选择sys.stdin/stdout作为默认值时的默认值格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am interested in using the ArgumentDefaultsHelpFormatter class formatter of argparse (my program has several sub-commands). By default, the input and output arguments are set to sys.stdin and sys.stdout respectively. However, the formatting for these two arguments may be a little bit confusing for users (e.g (default: ', mode 'r' at 0x10028e0c0>). Is there a way to specifically and easily change the output format for these two arguments to get something like 'default: STDIN' or 'default: 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子类化以执行所需的操作.

You can subclass ArgumentDefaultsHelpFormatter to do what you want.

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)

这篇关于Argparse和ArgumentDefaultsHelpFormatter.选择sys.stdin/stdout作为默认值时的默认值格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆