在 optparse 帮助输出中列出选项选择

3
当您使用Python的optparse模块为选项生成帮助时,您可以使用%default占位符将选项的默认值插入帮助中。如果类型是choice,有没有办法做同样的事情来处理有效选择?
例如:
import optparse
parser=optparse.OptionParser()
parser.add_option("-m","--method",
                  type = "choice", choices = ("method1","method2","method3"),
                  help = "Method to use. Valid choices are %choices. Default: %default")

1
Optparse被认为是过时的。你应该使用argparse - msvalkon
@msvalkon:您是否有使用argparse的解决方案? - John Zwinck
@JohnZwinck,好的,最终还是添加了一个。 - msvalkon
不幸的是,我正在使用一个使用optparse框架的项目中工作,除非上游做出改变,否则我无法切换到使用argparse。 - Ian Sudbery
3个回答

3

我猜你的问题在于你不想重复列出选择列表。幸运的是,变量是解决这种问题的一种普遍而有时又很丑的方法。因此,这个丑陋但实用的答案是:

import optparse

choices_m = ("method1","method2","method3")
default_m = "method_1"

parser=optparse.OptionParser()
parser.add_option("-m","--method",
                  type = "choice", choices = choices_m, 
                  default = defult_m,
                  help = "Method to use. Valid choices are %s. Default: %s"\
                         % (choices_m, default_m)

当然,这种事情也可以使用argparse来完成。

问题在于确保将来对有效选项列表的任何更改都会自动反映在帮助消息中。只要未来的维护者明白正在发生什么,这就可以正常工作。 - Ian Sudbery

2

正如@msvalkon所评论的那样,optparse已经被弃用 - 请改用argparse

您可以在help参数中指定%(choices)s占位符:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument("-m",
                    "--method",
                    type=str,
                    choices=("method1", "method2", "method3"),
                    help = "Method to use. Valid choices are %(choices)s. Default: %(default)s",
                    default="method1")

parser.parse_args()

这是控制台上的内容:

$ python test.py --help
usage: test.py [-h] [-m {method1,method2,method3}]

optional arguments:
  -h, --help            show this help message and exit
  -m {method1,method2,method3}, --method {method1,method2,method3}
                        Method to use. Valid choices are method1, method2,
                        method3. Default: method1

也许加上 default='method_n' - msvalkon

1

argparse 默认会打印选项,如下面的演示所示。自动打印默认值的一种方法是使用 ArgumentsDefaultHelpFormatter

import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-m","--method", type=str, choices=("method1","method2","method3"),
              default="method1", help = "Method to use.")

parser.parse_args()

演示:

msvalkon@Lunkwill:/tmp$ python test.py -h
usage: test.py [-h] [-m {method1,method2,method3}]

optional arguments:
  -h, --help            show this help message and exit
  -m {method1,method2,method3}, --method {method1,method2,method3}
                        Method to use. (default: method1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接