cpython/Lib/getopt.py

48 lines
1.7 KiB
Python
Raw Normal View History

1990-10-13 16:23:40 -03:00
# 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] <> '-':
1992-01-01 15:35:13 -04:00
if args[0] == '--':
1990-10-13 16:23:40 -03:00
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
1992-01-01 15:35:13 -04:00
if optstring == '':
1990-10-13 16:23:40 -03:00
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)):
1992-01-01 15:35:13 -04:00
if opt == options[i] <> ':':
return options[i+1:i+2] == ':'
1990-10-13 16:23:40 -03:00
raise error, 'option -' + opt + ' not recognized'