mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# 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'
							 |