Kaydet (Commit) 60b2e38b authored tarafından Georg Brandl's avatar Georg Brandl

#4568: remove limitation in varargs callback example.

üst 2d2fe572
...@@ -1630,36 +1630,33 @@ directly). ...@@ -1630,36 +1630,33 @@ directly).
Nevertheless, here's a stab at a callback for an option with variable Nevertheless, here's a stab at a callback for an option with variable
arguments:: arguments::
def vararg_callback(option, opt_str, value, parser): def vararg_callback(option, opt_str, value, parser):
assert value is None assert value is None
done = 0 value = []
value = []
rargs = parser.rargs def floatable(str):
while rargs: try:
arg = rargs[0] float(str)
return True
# Stop if we hit an arg like "--foo", "-a", "-fx", "--file=f", except ValueError:
# etc. Note that this also stops on "-3" or "-3.0", so if return False
# your option takes numeric values, you will need to handle
# this. for arg in parser.rargs:
if ((arg[:2] == "--" and len(arg) > 2) or # stop on --foo like options
(arg[:1] == "-" and len(arg) > 1 and arg[1] != "-")): if arg[:2] == "--" and len(arg) > 2:
break break
else: # stop on -a, but not on -3 or -3.0
value.append(arg) if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):
del rargs[0] break
value.append(arg)
setattr(parser.values, option.dest, value)
del parser.rargs[:len(value)]
setattr(parser.values, option.dest, value))
[...] [...]
parser.add_option("-c", "--callback", dest="vararg_attr", parser.add_option("-c", "--callback", dest="vararg_attr",
action="callback", callback=vararg_callback) action="callback", callback=vararg_callback)
The main weakness with this particular implementation is that negative numbers
in the arguments following ``"-c"`` will be interpreted as further options
(probably causing an error), rather than as arguments to ``"-c"``. Fixing this
is left as an exercise for the reader.
.. _optparse-extending-optparse: .. _optparse-extending-optparse:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment