在optparse中触发默认值的回调
我正在使用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"
上触发。
2 个回答
0
你可以在调用 parse_args
时加入默认值。
options, args = parser.parse_args(args=["--option=default"] + sys.argv[1:])
因为在参数列表中后面传入的标志会覆盖前面传入的,所以这样做应该是有效的。不过,根据你的回调函数的具体功能,你可能需要调整一下它,以便它能正确处理这个情况。
3
这根本不可能。
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
模块的设计让这个问题很难改变。