用于Python中命令行选项的C样式解析器
Python的sys模块可通过sys.argv访问任何命令行参数。sys.argv是命令行参数列表,而sys.argv[0]是程序,即。脚本名称。
将以下代码另存为args.py
import sys print ('argument list', sys.argv)
从命令行执行上述脚本,如下所示:
C:\python37>python args.py 11 22 argument list ['args.py', '11', '22']
getopt模块具有用于解析sys.argv中命令行参数的功能。它支持与Unixgetopt()
函数相同的约定(包括形式为“-”和“-”的参数的特殊含义)。
API旨在使Cgetopt()
函数的用户熟悉。
getopt(args,shortopts,longopts=[])
解析命令行选项和参数列表。args是参数列表,不包括sys.argv[0],它是对运行程序的主要引用。通常,这意味着sys.argv[1:]。该函数的参数如下-
shortopts:是脚本将识别的选项字母的字符串。需要参数的选项后跟一个冒号(“:”;即Unixgetopt()
使用的相同格式)。
Longopts:如果指定,则必须是包含应支持的long选项名称的字符串列表。选项名称中不应包含前导“-”字符。需要参数的长选项应后跟等号('=')。
返回值包含两个元素:第一个是(选项,值)对的列表;第二个是删除选项列表后剩下的程序参数列表(这是尾部的args)。返回的每个选项和值对都将选项作为其第一个元素,对于短选项(例如,'-x')前缀带有连字符,对于长选项(例如'--long-option')带有两个连字符,并且option参数作为其第二个元素;如果option没有参数,则为空字符串。这些选项在列表中的出现顺序与找到它们的顺序相同,因此允许多次出现。多头和空头期权可能混合在一起。
当在参数列表中找到无法识别的选项或不给需要参数的选项时,将引发GetoptError。
示例
import sys, getopt args=sys.argv[1:] inputfile = '' outputfile = '' try: opts, args = getopt.getopt(args,"hi:o:",["ifile=","ofile="]) except getopt.GetoptError: print ('test.py -i <inputfile> -o <outputfile>') sys.exit(2) for opt, arg in opts: if opt == '-h': print ('args.py -i <inputfile> -o <outputfile>') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print ('Input file is "', inputfile) print ('Output file is "', outputfile)
输出结果
C:\python37>python args.py -h args.py -i <inputfile> -o <outputfile> C:\python37>python args.py -i abc.txt -o xyz.txt Input file is " abc.txt Output file is " xyz.txt C:\python37>python args.py --ifile=abc.txt --ofile=xyz.txt Input file is " abc.txt Output file is " xyz.txt