getopt ---命令行选项的C样式分析器

源代码: Lib/getopt.py

注解

这个 getopt 模块是命令行选项的解析器,其API设计为C用户所熟悉 getopt() 功能。不熟悉C的用户 getopt() 函数或希望编写更少代码并获得更好帮助和错误消息的用户应考虑使用 argparse 模块代替。


此模块帮助脚本解析中的命令行参数 sys.argv .它支持与Unix相同的约定 getopt() 函数(包括形式为“-`”“和”“-``”“的参数的特殊含义)。与GNU软件支持的选项类似的长选项也可以通过可选的第三个参数来使用。

此模块提供两个功能和一个例外:

getopt.getopt(args, shortopts, longopts=[])

分析命令行选项和参数列表。 args 是要分析的参数列表,没有对正在运行的程序的前导引用。通常,这意味着 sys.argv[1:] . 短裤 是脚本要识别的选项字母字符串,其中的选项要求参数后跟冒号 (':' ;即与Unix相同的格式 getopt() 用途)。

注解

不像GNU getopt() 在非选项参数之后,所有其他参数也被视为非选项。这类似于非GNUUnix系统的工作方式。

长眼鱼 如果指定,则必须是具有应支持的长选项名称的字符串列表。领导 '--' 选项名称中不应包含字符。需要参数的长选项后面应该跟一个等号 ('=' )不支持可选参数。只接受长期期权, 短裤 应为空字符串。只要命令行上的长选项提供与一个已接受选项完全匹配的选项名称前缀,就可以识别它们。例如,如果 长眼鱼['foo', 'frob'] ,期权 --fo 将匹配为 --foo ,但是 --f 不会唯一匹配,因此 GetoptError 将被引发。

返回值由两个元素组成:第一个元素是 (option, value) 对;第二个是除去选项列表后留下的程序参数列表(这是 args )返回的每个选项和值对都将该选项作为其第一个元素,前缀为短选项的连字符(例如, '-x' )或两个连字符用于长选项(例如, '--long-option' )和作为第二个元素的选项参数,或者如果选项没有参数,则为空字符串。选项以找到它们的相同顺序出现在列表中,因此允许多次出现。多头和空头期权可能是混合的。

getopt.gnu_getopt(args, shortopts, longopts=[])

此函数的工作方式如下 getopt() ,但默认情况下使用GNU样式的扫描模式。这意味着选项和非选项参数可能混合在一起。这个 getopt() 一旦遇到非选项参数,函数就停止处理选项。

如果选项字符串的第一个字符是 '+' 或者如果环境变量 POSIXLY_CORRECT 设置后,一旦遇到非选项参数,选项处理就会停止。

exception getopt.GetoptError

当在参数列表中找到无法识别的选项,或者当需要参数的选项未给定时,会引发此问题。异常的参数是一个指示错误原因的字符串。对于长选项,为不需要参数的选项提供的参数也将导致引发此异常。属性 msgopt 给出错误消息和相关选项;如果没有与异常相关的特定选项, opt 是空字符串。

exception getopt.error

Alias GetoptError ;为了向后兼容。

仅使用Unix样式选项的示例:

>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> 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']

使用长选项名同样容易:

>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
...     'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
>>> args
['a1', 'a2']

在脚本中,典型用法如下:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError as err:
        # print help information and exit:
        print(err)  # will print something like "option -a not recognized"
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        elif o in ("-h", "--help"):
            usage()
            sys.exit()
        elif o in ("-o", "--output"):
            output = a
        else:
            assert False, "unhandled option"
    # ...

if __name__ == "__main__":
    main()

注意,通过使用 argparse 模块:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-o', '--output')
    parser.add_argument('-v', dest='verbose', action='store_true')
    args = parser.parse_args()
    # ... do something with args.output ...
    # ... do something with args.verbose ..

参见

模块 argparse

可选的命令行选项和参数分析库。