aboutsummaryrefslogtreecommitdiff
path: root/lib/getopt.py
blob: f343c223dd78209039a54119058b5985d826e4cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 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][0] = '-' 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'