| # module getopt -- Standard command line processing. | |
| # Function getopt.getopt() has a different interface but provides the | |
| # same functionality as the Unix getopt() function. | |
| # It has two arguments: the first should be argv[1:] (it doesn't want | |
| # the script name), the second the string of option letters as passed | |
| # to Unix getopt() (i.e., a string of allowable option letters, with | |
| # options requiring an argument followed by a colon). | |
| # It raises the exception getopt.error with a string argument if it | |
| # detects an error. | |
| # It returns two items: | |
| # (1) a list of pairs (option, option_argument) giving the options in | |
| # the order in which they were specified. (I'd use a dictionary | |
| # but applications may depend on option order or multiple | |
| # occurrences.) Boolean options have '' as option_argument. | |
| # (2) the list of remaining arguments (may be empty). | |
| error = 'getopt error' | |
| def getopt(args, options): | |
| list = [] | |
| while args and args[0][:1] == '-' and args[0] <> '-': | |
| if args[0] == '--': | |
| args = args[1:] | |
| break | |
| optstring, args = args[0][1:], args[1:] | |
| while optstring <> '': | |
| opt, optstring = optstring[0], optstring[1:] | |
| if classify(opt, options): # May raise exception as well | |
| if optstring == '': | |
| if not args: | |
| raise error, 'option -' + opt + ' requires argument' | |
| optstring, args = args[0], args[1:] | |
| optarg, optstring = optstring, '' | |
| else: | |
| optarg = '' | |
| list.append('-' + opt, optarg) | |
| return list, args | |
| def classify(opt, options): # Helper to check type of option | |
| for i in range(len(options)): | |
| if opt == options[i] <> ':': | |
| return options[i+1:i+2] == ':' | |
| raise error, 'option -' + opt + ' not recognized' |