optparse functionality missing

Robert Kern robert.kern at gmail.com
Sat Jun 21 01:22:59 CEST 2008

Jeff Keasler wrote:
> Hi,
> optparse doesn't seem to have a pass-through capability for command line 
> parameters/options that were not registered with add_option.
> I'm not the first person to complain about this.  On Wed Mar 17 08:20:10 
> CET 2004, there's a thread titled "Perceived optparse shortcomings" 
> where someone complains of the same problem.
> In a scripting environment, I often want to strip some of the command 
> line options off the argument list, and then pass the remaining options 
> to another module that is deeper in the tool chain.
> optparse doesn't seem to allow this, as far as I can tell.  It requires 
> that you register all possible options with add_option() or an error is 
> flagged. When my second tier module is an autoconf script that could 
> have hundreds of its own options, it seems dumb to have to register all 
> those options, just to have to reconvert them to command-line options so 
> that I can pass them to the autoconf command line.
> Could we get a mode added to optparse so that any commandline 
> parameters/options that are not registered via add_option() can be in 
> the args return value of the parse_args() method?

If you code it up with unit tests and documentation, it has a good chance. But 
in the meantime, you can tell optparse to stop processing options using the 
standard "--" marker. For example:

$ cat mycommand.py
import optparse

parser = optparse.OptionParser()
parser.add_option('--known-option', action='store_true')

options, args = parser.parse_args()
print 'options = %r' % (options,)
print 'args = %r' % (args,)

$ python mycommand.py --known-option -- --configure-flag --other-unknown
options = <Values at 0xb4a7d8: {'known_option': True}>
args = ['--configure-flag', '--other-unknown']

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

More information about the Python-list mailing list