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 中命令行参数的函数。它支持与 Unix getopt() 函数相同的约定(包括对“-”和“--”形式参数的特殊含义)。

API 的设计旨在方便 C getopt() 函数的用户使用。

getopt(args, shortopts, longopts=[])

解析命令行选项和参数列表。args 是参数列表,不包括 sys.argv[0](这是对正在运行程序的前导引用)。通常,这意味着 sys.argv[1:]。此函数的参数如下:

**shortopts:** 是脚本将识别的选项字母字符串。需要参数的选项后跟一个冒号(':';即 Unix getopt() 使用的相同格式)。

**Longopts:** 如果指定,必须是包含应支持的长选项名称的字符串列表。“--”字符不应包含在选项名称中。需要参数的长选项后应跟一个等号('=')。

返回值包含两个元素:第一个是 (选项,值) 对的列表;第二个是从选项列表中剥离后剩余的程序参数列表(这是 args 的尾随切片)。返回的每个选项值对都将选项作为其第一个元素,短选项前缀为连字符(例如,“-x”),长选项前缀为双连字符(例如,“--long-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

更新于:2019年7月30日

276 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告