在optparse中触发默认值的回调

时间:2013-01-28 17:56:05

标签: python 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 :(得分: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

由于参数列表中稍后传递的标志会覆盖之前传递的标志,因此这应该起作用。可能需要修改回调函数才能实现此期望,具体取决于它在做什么。