python解析命令行参数

常常需要解析命令行参数,经常忘记,好烦,总结下来吧。

1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数:

 

sys.argv 是命令行参数列表

参数个数:len(sys.argv)
脚本名:    sys.argv[0]
参数1:     sys.argv[1]

示例代码如下:

1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3 
4 import sys
5 
6 print('参数个数为: ' + str(len(sys.argv)) + '个参数。')
7 print("脚本名:" + sys.argv[0])
8 for i in range(1, len(sys.argv)):
9     print("参数" + str(i) + ': ' + sys.argv[i])

2.getopt模块

getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。

该模块提供了两个方法及一个异常处理来解析命令行参数。

getopt.getopt 方法

getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

getopt.getopt(args, options[, long_options])

方法参数说明:

  • args: 要解析的命令行参数列表。

  • options: 以列表的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。

  • long_options: 以字符串的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。

  • 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有'-'或'--'的参数。

另外一个方法是 getopt.gnu_getopt,这里不多做介绍。


Exception getopt.GetoptError

在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。

 示例代码如下:

 1 # -*- coding:utf-8 -*- 
 2 
 3 import sys, getopt
 4 
 5 def main(argv):
 6     inputfile = ""
 7     outputfile = ""
 8 
 9     try:
10         # 这里的 h 就表示该选项无参数,i:表示 i 选项后需要有参数
11         opts, args = getopt.getopt(argv, "hi:o:",["infile=", "outfile=", "version", "help"])
12         #第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有'-'或'--'的参数
13     except getopt.GetoptError:
14         print('test_arg.py -i <inputfile> -o <outputfile>')
15         print('or: test_arg.py --infile=<inputfile> --outfile=<outputfile>')
16         print('or: test_arg.py --version --help')
17         sys.exit(2)
18 
19     if len(args) > 0:    #表示有未识别的参数格式
20         print('test_arg.py -i <inputfile> -o <outputfile>')
21         print('or: test_arg.py --infile=<inputfile> --outfile=<outputfile>')
22         print('or: test_arg.py --version --help')
23         sys.exit(1)
24     else:
25         for opt, arg in opts:
26             if opt in ("-h", "--help"):
27                 print('test_arg.py -i <inputfile> -o <outputfile>')
28                 print('or: test_arg.py --infile=<inputfile> --outfile=<outputfile>')
29                 print('or: test_arg.py --version --help')
30     
31                 sys.exit()
32             elif opt in ("-i", "--infile"):
33                 inputfile = arg
34             elif opt in ("-o", "--outfile"):
35                 outputfile = arg
36             elif opt in ("--version"):
37                 print('0.0.1')
38                 sys.exit()
39 
40     print('Input file : ', inputfile)
41     print('Output file: ', outputfile)
42 
43 if __name__ == "__main__":
44     main(sys.argv[1:])

 

posted on 2017-12-04 16:12  帅胡  阅读(1087)  评论(0编辑  收藏  举报

导航