How can I get optparse's OptionParser to ignore invalid options?

后端 未结 5 1915
清歌不尽
清歌不尽 2020-12-09 15:53

In python\'s OptionParser, how can I instruct it to ignore

5条回答
  •  情深已故
    2020-12-09 16:45

    Here's one way to have unknown arguments added to the result args of OptionParser.parse_args, with a simple subclass.

    from optparse import (OptionParser,BadOptionError,AmbiguousOptionError)
    
    class PassThroughOptionParser(OptionParser):
        """
        An unknown option pass-through implementation of OptionParser.
    
        When unknown arguments are encountered, bundle with largs and try again,
        until rargs is depleted.  
    
        sys.exit(status) will still be called if a known argument is passed
        incorrectly (e.g. missing arguments or bad argument types, etc.)        
        """
        def _process_args(self, largs, rargs, values):
            while rargs:
                try:
                    OptionParser._process_args(self,largs,rargs,values)
                except (BadOptionError,AmbiguousOptionError), e:
                    largs.append(e.opt_str)
    

    And here's a snippet to show that it works:

    # Show that the pass-through option parser works.
    if __name__ == "__main__": #pragma: no cover
        parser = PassThroughOptionParser()
        parser.add_option('-k', '--known-arg',dest='known_arg',nargs=1, type='int')
        (options,args) = parser.parse_args(['--shazbot','--known-arg=1'])    
        assert args[0] == '--shazbot'
        assert options.known_arg == 1
    
        (options,args) = parser.parse_args(['--k','4','--batman-and-robin'])
        assert args[0] == '--batman-and-robin'
        assert options.known_arg == 4
    

提交回复
热议问题