| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{getopt} --- | 
					
						
							| 
									
										
										
										
											2000-10-10 17:03:45 +00:00
										 |  |  |          Parser for command line options} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-10 17:03:45 +00:00
										 |  |  | \declaremodule{standard}{getopt} | 
					
						
							|  |  |  | \modulesynopsis{Portable parser for command line options; support both | 
					
						
							|  |  |  |                 short and long option names.} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | This module helps scripts to parse the command line arguments in | 
					
						
							|  |  |  | \code{sys.argv}. | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | It supports the same conventions as the \UNIX{} \cfunction{getopt()} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | function (including the special meanings of arguments of the form | 
					
						
							| 
									
										
										
										
											1997-04-02 06:05:07 +00:00
										 |  |  | `\code{-}' and `\code{-}\code{-}'). | 
					
						
							|  |  |  | % That's to fool latex2html into leaving the two hyphens alone!
 | 
					
						
							|  |  |  | Long options similar to those supported by | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | GNU software may be used as well via an optional third argument. | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | This module provides a single function and an exception: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{getopt}{args, options\optional{, long_options}} | 
					
						
							|  |  |  | Parses command line options and parameter list.  \var{args} is the | 
					
						
							|  |  |  | argument list to be parsed, without the leading reference to the | 
					
						
							|  |  |  | running program. Typically, this means \samp{sys.argv[1:]}. | 
					
						
							|  |  |  | \var{options} is the string of option letters that the script wants to | 
					
						
							|  |  |  | recognize, with options that require an argument followed by a colon | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | (\character{:}; i.e., the same format that \UNIX{} | 
					
						
							|  |  |  | \cfunction{getopt()} uses). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-20 04:24:09 +00:00
										 |  |  | \note{Unlike GNU \cfunction{getopt()}, after a non-option | 
					
						
							| 
									
										
										
										
											2001-04-11 07:33:08 +00:00
										 |  |  | argument, all further arguments are considered also non-options. | 
					
						
							| 
									
										
										
										
											2001-10-20 04:24:09 +00:00
										 |  |  | This is similar to the way non-GNU \UNIX{} systems work.} | 
					
						
							| 
									
										
										
										
											2001-04-11 07:33:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | \var{long_options}, if specified, must be a list of strings with the | 
					
						
							|  |  |  | names of the long options which should be supported.  The leading | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | \code{'-}\code{-'} characters should not be included in the option | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | name.  Long options which require an argument should be followed by an | 
					
						
							| 
									
										
										
										
											2001-01-08 16:05:51 +00:00
										 |  |  | equal sign (\character{=}).  To accept only long options, | 
					
						
							|  |  |  | \var{options} should be an empty string.  Long options on the command | 
					
						
							|  |  |  | line can be recognized so long as they provide a prefix of the option | 
					
						
							|  |  |  | name that matches exactly one of the accepted options.  For example, | 
					
						
							|  |  |  | it \var{long_options} is \code{['foo', 'frob']}, the option | 
					
						
							|  |  |  | \longprogramopt{fo} will match as \longprogramopt{foo}, but | 
					
						
							|  |  |  | \longprogramopt{f} will not match uniquely, so \exception{GetoptError} | 
					
						
							|  |  |  | will be raised. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The return value consists of two elements: the first is a list of | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | \code{(\var{option}, \var{value})} pairs; the second is the list of | 
					
						
							|  |  |  | program arguments left after the option list was stripped (this is a | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | trailing slice of \var{args}).  Each option-and-value pair returned | 
					
						
							|  |  |  | has the option as its first element, prefixed with a hyphen for short | 
					
						
							|  |  |  | options (e.g., \code{'-x'}) or two hyphens for long options (e.g., | 
					
						
							|  |  |  | \code{'-}\code{-long-option'}), and the option argument as its second | 
					
						
							|  |  |  | element, or an empty string if the option has no argument.  The | 
					
						
							|  |  |  | options occur in the list in the same order in which they were found, | 
					
						
							|  |  |  | thus allowing multiple occurrences.  Long and short options may be | 
					
						
							|  |  |  | mixed. | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-06 10:58:36 +00:00
										 |  |  | \begin{funcdesc}{gnu_getopt}{args, options\optional{, long_options}} | 
					
						
							|  |  |  | This function works like \function{getopt()}, except that GNU style | 
					
						
							|  |  |  | scanning mode is used by default. This means that option and | 
					
						
							|  |  |  | non-option arguments may be intermixed. The \function{getopt()} | 
					
						
							|  |  |  | function stops processing options as soon as a non-option argument is | 
					
						
							|  |  |  | encountered. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the first character of the option string is `+', or if the | 
					
						
							|  |  |  | environment variable POSIXLY_CORRECT is set, then option processing | 
					
						
							|  |  |  | stops as soon as a non-option argument is encountered. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-21 22:50:05 +00:00
										 |  |  | \begin{excdesc}{GetoptError} | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | This is raised when an unrecognized option is found in the argument | 
					
						
							|  |  |  | list or when an option requiring an argument is given none. | 
					
						
							|  |  |  | The argument to the exception is a string indicating the cause of the | 
					
						
							|  |  |  | error.  For long options, an argument given to an option which does | 
					
						
							| 
									
										
										
										
											1999-12-21 22:50:05 +00:00
										 |  |  | not require one will also cause this exception to be raised.  The | 
					
						
							|  |  |  | attributes \member{msg} and \member{opt} give the error message and | 
					
						
							|  |  |  | related option; if there is no specific option to which the exception | 
					
						
							|  |  |  | relates, \member{opt} is an empty string. | 
					
						
							| 
									
										
										
										
											2001-04-18 03:18:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \versionchanged[Introduced \exception{GetoptError} as a synonym for | 
					
						
							|  |  |  |                 \exception{error}]{1.6} | 
					
						
							| 
									
										
										
										
											1999-12-21 22:50:05 +00:00
										 |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{error} | 
					
						
							|  |  |  | Alias for \exception{GetoptError}; for backward compatibility. | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | An example using only \UNIX{} style options: | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-13 06:58:54 +00:00
										 |  |  | \begin{verbatim} | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | >>> import getopt | 
					
						
							|  |  |  | >>> args = '-a -b -cfoo -d bar a1 a2'.split() | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | >>> args | 
					
						
							|  |  |  | ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] | 
					
						
							|  |  |  | >>> optlist, args = getopt.getopt(args, 'abc:d:') | 
					
						
							|  |  |  | >>> optlist | 
					
						
							|  |  |  | [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] | 
					
						
							|  |  |  | >>> args | 
					
						
							|  |  |  | ['a1', 'a2'] | 
					
						
							| 
									
										
										
										
											1998-02-13 06:58:54 +00:00
										 |  |  | \end{verbatim} | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | Using long option names is equally easy: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-13 06:58:54 +00:00
										 |  |  | \begin{verbatim} | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | >>> args = s.split() | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | >>> args | 
					
						
							|  |  |  | ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] | 
					
						
							|  |  |  | >>> optlist, args = getopt.getopt(args, 'x', [ | 
					
						
							|  |  |  | ...     'condition=', 'output-file=', 'testing']) | 
					
						
							|  |  |  | >>> optlist | 
					
						
							| 
									
										
										
										
											1998-03-10 03:36:00 +00:00
										 |  |  | [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', | 
					
						
							|  |  |  |  '')] | 
					
						
							| 
									
										
										
										
											1996-09-11 21:26:29 +00:00
										 |  |  | >>> args | 
					
						
							|  |  |  | ['a1', 'a2'] | 
					
						
							| 
									
										
										
										
											2000-08-11 19:55:06 +00:00
										 |  |  | \end{verbatim} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In a script, typical usage is something like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | import getopt, sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="]) | 
					
						
							|  |  |  |     except getopt.GetoptError: | 
					
						
							|  |  |  |         # print help information and exit: | 
					
						
							|  |  |  |         usage() | 
					
						
							|  |  |  |         sys.exit(2) | 
					
						
							|  |  |  |     output = None | 
					
						
							|  |  |  |     for o, a in opts: | 
					
						
							|  |  |  |         if o in ("-h", "--help"): | 
					
						
							|  |  |  |             usage() | 
					
						
							|  |  |  |             sys.exit() | 
					
						
							|  |  |  |         if o in ("-o", "--output"): | 
					
						
							|  |  |  |             output = a | 
					
						
							|  |  |  |     # ... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     main() | 
					
						
							| 
									
										
										
										
											1998-02-13 06:58:54 +00:00
										 |  |  | \end{verbatim} |