我正在使用Python的optparse做它最擅长的事情,但如果没有通过命令行指定其他参数值,我无法弄清楚如何在默认参数值上设置选项回调触发器;这有可能吗?这将使我的代码更清晰。
不幸的是,我无法使用argparse,因为我正在运行的平台有一个过时的Python版本。
修改 为了提供更多细节,我添加了一个带回调和默认值的选项
parser.add_option(
"-f",
"--format",
type = "string",
action = "callback",
callback = format_callback,
default = "a,b,c,d")
回调函数定义如下:
def format_callback(option, opt, value, parser):
# some processing
parser.values.V = processed_value
基本上我正在处理"--format"
值并将结果放入解析器中。当通过命令行直接指定"--format"
时,这样可以正常工作,但我也希望在默认的"a,b,c,d"
值上触发回调。
答案 0 :(得分:2)
根本不可能。
optparse.OptionParser
parse_args
的实施始于:
def parse_args(self, args=None, values=None):
"""
parse_args(args : [string] = sys.argv[1:],
values : Values = None)
-> (values : Values, args : [string])
Parse the command-line options found in 'args' (default:
sys.argv[1:]). Any errors result in a call to 'error()', which
by default prints the usage message to stderr and calls
sys.exit() with an error message. On success returns a pair
(values, args) where 'values' is an Values instance (with all
your option values) and 'args' is the list of arguments left
over after parsing options.
"""
rargs = self._get_args(args)
if values is None:
values = self.get_default_values()
在处理任何参数之前设置默认值。然后,当解析选项时,实际值会覆盖默认值;在找到相应的参数时调用选项回调。
因此,无法为默认值调用回调。 optparse
模块的设计使得这很难改变。
答案 1 :(得分:0)
您可以在调用('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'l', 'b', 'n', 'z', 'm', 'k', 'c', 'x', 'v', 'j')
parse_args
由于参数列表中稍后传递的标志会覆盖之前传递的标志,因此这应该起作用。可能需要修改回调函数才能实现此期望,具体取决于它在做什么。