Skip to content Skip to sidebar Skip to footer

Triggering Callback On Default Value In Optparse

I'm using Python's optparse to do what it does best, but I can't figure out how to make the option callback trigger on the default argument value if no other is specified via comma

Solution 1:

It is simply not possible.

The optparse.OptionParser implementation of parse_args starts with:

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()

Default values are set before processing any arguments. Actual values then overwrite defaults as options are parsed; the option callbacks are called when a corresponding argument is found.

So callbacks simply cannot be invoked for defaults. The design of the optparse module makes this very hard to change.


Solution 2:

You can inject the default when calling parse_args

options, args = parser.parse_args(args=["--option=default"] + sys.argv[1:])

Since flags passed later in the argument list override those passed earlier, this should work. It's possible you may need to modify your callback function to expect this depending on what it is doing.


Post a Comment for "Triggering Callback On Default Value In Optparse"