用于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