17db96d56Sopenharmony_ci:mod:`getopt` --- C-style parser for command line options 27db96d56Sopenharmony_ci========================================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: getopt 57db96d56Sopenharmony_ci :synopsis: Portable parser for command line options; support both short and 67db96d56Sopenharmony_ci long option names. 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci**Source code:** :source:`Lib/getopt.py` 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci.. note:: 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci The :mod:`getopt` module is a parser for command line options whose API is 137db96d56Sopenharmony_ci designed to be familiar to users of the C :c:func:`getopt` function. Users who 147db96d56Sopenharmony_ci are unfamiliar with the C :c:func:`getopt` function or who would like to write 157db96d56Sopenharmony_ci less code and get better help and error messages should consider using the 167db96d56Sopenharmony_ci :mod:`argparse` module instead. 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci-------------- 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ciThis module helps scripts to parse the command line arguments in ``sys.argv``. 217db96d56Sopenharmony_ciIt supports the same conventions as the Unix :c:func:`getopt` function (including 227db96d56Sopenharmony_cithe special meanings of arguments of the form '``-``' and '``--``'). Long 237db96d56Sopenharmony_cioptions similar to those supported by GNU software may be used as well via an 247db96d56Sopenharmony_cioptional third argument. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciThis module provides two functions and an 277db96d56Sopenharmony_ciexception: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci.. function:: getopt(args, shortopts, longopts=[]) 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci Parses command line options and parameter list. *args* is the argument list to 337db96d56Sopenharmony_ci be parsed, without the leading reference to the running program. Typically, this 347db96d56Sopenharmony_ci means ``sys.argv[1:]``. *shortopts* is the string of option letters that the 357db96d56Sopenharmony_ci script wants to recognize, with options that require an argument followed by a 367db96d56Sopenharmony_ci colon (``':'``; i.e., the same format that Unix :c:func:`getopt` uses). 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci .. note:: 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci Unlike GNU :c:func:`getopt`, after a non-option argument, all further 417db96d56Sopenharmony_ci arguments are considered also non-options. This is similar to the way 427db96d56Sopenharmony_ci non-GNU Unix systems work. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci *longopts*, if specified, must be a list of strings with the names of the 457db96d56Sopenharmony_ci long options which should be supported. The leading ``'--'`` characters 467db96d56Sopenharmony_ci should not be included in the option name. Long options which require an 477db96d56Sopenharmony_ci argument should be followed by an equal sign (``'='``). Optional arguments 487db96d56Sopenharmony_ci are not supported. To accept only long options, *shortopts* should be an 497db96d56Sopenharmony_ci empty string. Long options on the command line can be recognized so long as 507db96d56Sopenharmony_ci they provide a prefix of the option name that matches exactly one of the 517db96d56Sopenharmony_ci accepted options. For example, if *longopts* is ``['foo', 'frob']``, the 527db96d56Sopenharmony_ci option ``--fo`` will match as ``--foo``, but ``--f`` will 537db96d56Sopenharmony_ci not match uniquely, so :exc:`GetoptError` will be raised. 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci The return value consists of two elements: the first is a list of ``(option, 567db96d56Sopenharmony_ci value)`` pairs; the second is the list of program arguments left after the 577db96d56Sopenharmony_ci option list was stripped (this is a trailing slice of *args*). Each 587db96d56Sopenharmony_ci option-and-value pair returned has the option as its first element, prefixed 597db96d56Sopenharmony_ci with a hyphen for short options (e.g., ``'-x'``) or two hyphens for long 607db96d56Sopenharmony_ci options (e.g., ``'--long-option'``), and the option argument as its 617db96d56Sopenharmony_ci second element, or an empty string if the option has no argument. The 627db96d56Sopenharmony_ci options occur in the list in the same order in which they were found, thus 637db96d56Sopenharmony_ci allowing multiple occurrences. Long and short options may be mixed. 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci.. function:: gnu_getopt(args, shortopts, longopts=[]) 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci This function works like :func:`getopt`, except that GNU style scanning mode is 697db96d56Sopenharmony_ci used by default. This means that option and non-option arguments may be 707db96d56Sopenharmony_ci intermixed. The :func:`getopt` function stops processing options as soon as a 717db96d56Sopenharmony_ci non-option argument is encountered. 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci If the first character of the option string is ``'+'``, or if the environment 747db96d56Sopenharmony_ci variable :envvar:`POSIXLY_CORRECT` is set, then option processing stops as 757db96d56Sopenharmony_ci soon as a non-option argument is encountered. 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci.. exception:: GetoptError 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci This is raised when an unrecognized option is found in the argument list or when 817db96d56Sopenharmony_ci an option requiring an argument is given none. The argument to the exception is 827db96d56Sopenharmony_ci a string indicating the cause of the error. For long options, an argument given 837db96d56Sopenharmony_ci to an option which does not require one will also cause this exception to be 847db96d56Sopenharmony_ci raised. The attributes :attr:`msg` and :attr:`opt` give the error message and 857db96d56Sopenharmony_ci related option; if there is no specific option to which the exception relates, 867db96d56Sopenharmony_ci :attr:`opt` is an empty string. 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci.. XXX deprecated? 897db96d56Sopenharmony_ci.. exception:: error 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci Alias for :exc:`GetoptError`; for backward compatibility. 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ciAn example using only Unix style options: 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci >>> import getopt 967db96d56Sopenharmony_ci >>> args = '-a -b -cfoo -d bar a1 a2'.split() 977db96d56Sopenharmony_ci >>> args 987db96d56Sopenharmony_ci ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] 997db96d56Sopenharmony_ci >>> optlist, args = getopt.getopt(args, 'abc:d:') 1007db96d56Sopenharmony_ci >>> optlist 1017db96d56Sopenharmony_ci [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] 1027db96d56Sopenharmony_ci >>> args 1037db96d56Sopenharmony_ci ['a1', 'a2'] 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ciUsing long option names is equally easy: 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' 1087db96d56Sopenharmony_ci >>> args = s.split() 1097db96d56Sopenharmony_ci >>> args 1107db96d56Sopenharmony_ci ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] 1117db96d56Sopenharmony_ci >>> optlist, args = getopt.getopt(args, 'x', [ 1127db96d56Sopenharmony_ci ... 'condition=', 'output-file=', 'testing']) 1137db96d56Sopenharmony_ci >>> optlist 1147db96d56Sopenharmony_ci [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')] 1157db96d56Sopenharmony_ci >>> args 1167db96d56Sopenharmony_ci ['a1', 'a2'] 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ciIn a script, typical usage is something like this:: 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci import getopt, sys 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci def main(): 1237db96d56Sopenharmony_ci try: 1247db96d56Sopenharmony_ci opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) 1257db96d56Sopenharmony_ci except getopt.GetoptError as err: 1267db96d56Sopenharmony_ci # print help information and exit: 1277db96d56Sopenharmony_ci print(err) # will print something like "option -a not recognized" 1287db96d56Sopenharmony_ci usage() 1297db96d56Sopenharmony_ci sys.exit(2) 1307db96d56Sopenharmony_ci output = None 1317db96d56Sopenharmony_ci verbose = False 1327db96d56Sopenharmony_ci for o, a in opts: 1337db96d56Sopenharmony_ci if o == "-v": 1347db96d56Sopenharmony_ci verbose = True 1357db96d56Sopenharmony_ci elif o in ("-h", "--help"): 1367db96d56Sopenharmony_ci usage() 1377db96d56Sopenharmony_ci sys.exit() 1387db96d56Sopenharmony_ci elif o in ("-o", "--output"): 1397db96d56Sopenharmony_ci output = a 1407db96d56Sopenharmony_ci else: 1417db96d56Sopenharmony_ci assert False, "unhandled option" 1427db96d56Sopenharmony_ci # ... 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci if __name__ == "__main__": 1457db96d56Sopenharmony_ci main() 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ciNote that an equivalent command line interface could be produced with less code 1487db96d56Sopenharmony_ciand more informative help and error messages by using the :mod:`argparse` module:: 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci import argparse 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci if __name__ == '__main__': 1537db96d56Sopenharmony_ci parser = argparse.ArgumentParser() 1547db96d56Sopenharmony_ci parser.add_argument('-o', '--output') 1557db96d56Sopenharmony_ci parser.add_argument('-v', dest='verbose', action='store_true') 1567db96d56Sopenharmony_ci args = parser.parse_args() 1577db96d56Sopenharmony_ci # ... do something with args.output ... 1587db96d56Sopenharmony_ci # ... do something with args.verbose .. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci.. seealso:: 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci Module :mod:`argparse` 1637db96d56Sopenharmony_ci Alternative command line option and argument parsing library. 1647db96d56Sopenharmony_ci 165