On 10/14/2011 03:29 PM, Peng Yu wrote: > Hi, > > The following code doesn't give me error, even I don't specify the > value of filename from the command line arguments. filename gets > 'None'. I checked the manual, but I don't see a way to let > OptionParser fail if an argument's value (which has no default > explicitly specified) is not specified. I may miss some thing in the > manual. Could any expert let me know if there is a way to do so? > Thanks! > > #!/usr/bin/env python > > from optparse import OptionParser > > usage = 'usage: %prog [options] arg1 arg2' > parser = OptionParser(usage=usage) > parser.set_defaults(verbose=True) > parser.add_option('-f', '--filename') > > #(options, args) = parser.parse_args(['-f', 'file.txt']) > (options, args) = parser.parse_args() > > print options.filename
You can check it yourself. I find I use a pretty standard pattern with optparse: def main (args, opts): ... def parse_cmdline (): p = OptionParser() p.add_option('-f', '--filename') options, args = parser.parse_args() if not options.filename: p.error ("-f option required") if len (args) != 2: p.error ("Expected exactly 2 arguments") # Other checks can obviously be done here too. return args, options if __name__ == '__main__': args, opts = parse_cmdline() main (args, opts) While one can probably subclass OptionParser or use callbacks to achieve the same end, I find the above approach simple and easy to follow. I also presume you know that you have can optparse produce a usage message by adding 'help' arguments to the add_option() calls? And as was mentioned in another post, argparse in Python 2.7 (or in earlier Pythons by downloading/installing it yourself) can do the checking you want. -- http://mail.python.org/mailman/listinfo/python-list