用于命令行选项的C风格解析器 – 通用操作系统服务(Python教程)(参考资料)
getopt
– 用于命令行选项的C风格解析器
源代码: Lib / getopt.py
注意
getopt
module是命令行选项的解析器,其API设计为C getopt()
函数的用户熟悉。不熟悉C的用户getopt()
功能或者谁想要无代码并获得更好的帮助和错误信息应该考虑使用argparse
模块来代替
这个模块帮助脚本解析sys.argv
中的命令行参数。它支持与Unix getopt()
函数相同的约定(包括形式’-
‘和’--
‘)。类似于GNU软件支持的Longoptions也可以通过第三个参数使用.
这个模块提供了两个函数和一个例外:
getopt.
getopt
(args, shortopts, longopts=[])- 解析命令行选项和参数列表。args是要解析的参数列表,没有对正在运行的程序的前导引用。通常,这意味着
sys.argv[1:]
. shortopts是脚本想要识别的选项字母串,其中的选项需要一个参数后跟acolon(":"
;即,与Unixgetopt()
使用的格式相同).longopts,如果指定,必须是一个字符串列表,其中包含应该支持的long选项的名称。前导
"--"
字符不应包含在选项名称中。需要争论的长期选项后面应该是等号("="
)。不支持可选参数。要只接受长选项,shortopts应该是空字符串。可以识别命令行上的长选项,只要它们提供的选项名称的前缀恰好与其中一个接受的选项匹配即可。例如,如果longopts是["foo", "frob"]
,则选项--fo
将匹配为--foo
,但--f
将不匹配唯一,所以GetoptError
会被抬起来返回值由两个元素组成:第一个是
(option,value)
对;第二个是删除选项列表后留下的程序参数列表(这是的尾随切片args)。返回的每个选项和值对都有选项作为其第一个元素,前缀为短连接的连字符(例如"-x"
)或两个长连接的连字符(例如"--long-option"
),并将option参数作为其第二个元素,如果该选项没有参数,则为空字符串。选项以与查找顺序相同的顺序出现在列表中,从而多次出现。多种多头和空头的选择可能会混合在一起
getopt.
gnu_getopt
(args, shortopts, longopts=[])- 除了默认使用GNU样式扫描模式外,此函数的作用类似于
getopt()
。这意味着可以混合选项和非选项参数。getopt()
一旦遇到anon-option参数,函数就会停止处理选项.如果选项字符串的第一个字符是
"+"
,或者环境变量POSIXLY_CORRECT
设置,然后选项处理在遇到非选项参数时停止运行.
- exception
getopt.
GetoptError
- 当在参数列表中找到无法识别的选项或者需要参数的选项为none时,会引发此问题。异常的参数是指示错误原因的字符串。对于长选项,参数赋予一个不需要的选项也会导致这个异常被提升。属性
msg
和opt
给出错误消息和相关选项;如果没有与该例外有关的特定选项,opt
是一个空字符串
- exception
getopt.
error
- 对于
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 ..
评论被关闭。