#!/usr/bin/env python # Parsing options from somewhere other than sys.argv with Optik. from optik import OptionParser def main(): # The usual reason for wanting to parse options from somewhere other # than the command-line (sys.argv) is to allow the user (or # sysadmin) to specify default options via a config file, an # environment variable, or some other means. In the real world, # we'd have to worry about finding, reading, and parsing that # external info; for this example, I'll just hard-code an argument # list. # # Also, in the real world you'd probably be content with Optik's # default expansion of %prog (in usage and version strings). For # testing/illustrative purposes, though, I'm also going to supply a # custom value here. prog = "test" usage = "%prog [-a string] [-b int] [--foo string ...]" parser = OptionParser(prog=prog, usage=usage) parser.add_option("-a") parser.add_option("-b", type="int") parser.add_option("--foo", action="append") # First, ask for help -- but intercept Optik's sys.exit() call. try: print "parsing with --help..." parser.parse_args(["--help"]) except SystemExit, err: print "optik called sys.exit(%r)" % err.args else: print "expected optik to exit!" print # Parse a broken command-line and show the error message. try: print "parsing with invalid options..." parser.parse_args(["-b", "xx"]) except SystemExit, err: print "optik called sys.exit(%r)" % err.args else: print "expected an error!" print # Now parse a valid command-line and check the results. print "parsing with valid options..." args = ["-afoo", "-b", "42", "--foo", "hello", "--foo=again"] (options, args) = parser.parse_args(args) assert args == [], "args: expected empty list, got %r" % args assert options.a == "foo", "-a: expected 'foo', got %r" % options.a assert options.b == 42, "-b: expected 42, got %r" % options.b assert options.foo == ["hello", "again"] print "all good!" main()