Optparse:可变参数回调行为的用法未指明需要额外参数

3 投票
3 回答
1259 浏览
提问于 2025-04-15 11:42

我在我的Python代码中实现了一个类似于这里所提到的可变参数的回调功能:
https://docs.python.org/library/optparse.html#callback-example-6-variable-arguments

我这样添加选项:

parser.add_option("-c", "--callback", dest="vararg_attr", action="callback", callback=vararg_callback)

问题是,用户并不知道这个选项需要额外的输入:

Options:  
    -h, --help      show this help message and exit  
    -c, --callback

有没有办法改变optparse的用法,让它在使用时显示一些提示,比如:

-c=LIST, --callback=LIST

3 个回答

0

optparse这个工具在你没有指定参数类型的时候(也就是默认的None),不会显示需要额外参数的提示。如果你指定了参数类型和一个占位符名称,它就会在帮助信息中显示出来:

parser.add_option("-c", "--callback",
                  dest="vararg_attr",
                  type="string", 
                  metavar="LIST", 
                  action="callback", 
                  callback=vararg_callback,
                  help="do stuff")

输出结果:

Options:  
  -h, --help            show this help message and exit
  -c LIST, --callback=LIST
                        do stuff
1

用户提到的 metavar 这个关键字参数:

parser.add_option("-c", "--callback", dest="vararg_attr", action="callback", callback=vararg_callback, metavar='LIST')

参考链接: http://docs.python.org/library/optparse.html

2

这涉及到一种叫做“猴子补丁”的技术,可能不是最好的解决办法。不过,另一方面,它似乎是有效的。

from optparse import OptionParser, Option

# Complete hack.
Option.ALWAYS_TYPED_ACTIONS += ('callback',)

def dostuff(*a):
    pass

parser = OptionParser()
parser.add_option("-c",
                  "--callback",
                  dest="filename",
                  action="callback",
                  callback=dostuff,
                  metavar='LIST',
                  help='do stuff',
                  )

(options, args) = parser.parse_args()

输出结果:

Usage: opt.py [options]

Options:
  -h, --help            show this help message and exit
  -c LIST, --callback=LIST
                        do stuff

撰写回答