一、sys 模块
在 Python 中,通过 sys 模块中的 sys.argv 可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表。
len(sys.argv) :是命令行参数个数
sys.argv[0]:参数1
sys.argv[1]:参数2
实例
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @Time : 2018-04-11 17:58 @Author : jianjun.wang @Email : alanwang6584@gmail.com """ import sys def main(): print 'arg num : ', len(sys.argv) print 'args : ', sys.argv print 'script name : ', sys.argv[0] for i in range(len(sys.argv)): print "arg[{0}] = {1}".format(i, sys.argv[i]) if __name__ == "__main__": main()
命令行中输入:python D023_get_arg_sys.py alan 3
输出
arg num : 3 args : ['D023_get_arg_sys.py', 'alan', '3'] script name : D023_get_arg_sys.py arg[0] = D023_get_arg_sys.py arg[1] = alan arg[2] = 3
二、getopt 模块
有时候我们需要传递多个参数,每个参数表示不同的含义,而且有时候有的参数有,有的参数没有。比如我们需要从打点文件(file)中分析某国家(country)某个版本(version)的统计结果,可以看到这里有四个参数:脚本名、file、country、country,但有时可能从文件中查某版本的(只有 脚本名、file、version 参数),或查某国家的(脚本名、file、country 参数),这时用 sys 模块就比较麻烦了,因为,第三个参数有可能是 country、也可能是 version,也可能都没有(如分析该文件中所有国家所有版本的数据)。这时用 getopt 就可以很好的解决这个需求。
getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。
该模块提供了两个方法及一个异常处理来解析命令行参数。
getopt.getopt 方法
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
options, args = getopt.getopt(args, shortopts, longopts=[])
方法参数说明:
shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数如:"h f: v:"h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法f 和 v 后面带有冒号,表示该选项有附加参数
longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数如:["help", "file=", "version="]help 后面没有等号,表示该选项没有附加参数file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数
longopts: 以列表的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。
返回值含义:options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv')args:包含那些没有 '-' 或 '--' 的参数列表
异常: getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常 异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息
实例
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @Time : 2018-04-11 19:26 @Author : jianjun.wang @Email : alanwang6584@gmail.com """ import sys import getopt def main(args): file='' country='' version='' """ 语法格式: options, args = getopt.getopt(args, shortopts, longopts=[]) 参数含义: args:要解析的命令行参数列表,sys.argv[1:],过滤掉 sys.argv[0],它是执行脚本的名字,不算命令行参数 shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数 如:"hf:v:" h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法 f 和 v 后面带有冒号,表示该选项有附加参数 longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数 如:["help", "file=", "version="] help 后面没有等号,表示该选项没有附加参数 file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数 返回值含义: options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv') args:包含那些没有 '-' 或 '--' 的参数列表 异常: getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常 异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息 """ try: options, args = getopt.getopt(args, "hf:c:v:", ["help", "file=", "country=", "version="]) except getopt.GetoptError: print 'Error: get_args.py -f <file> -c <country> -v <version>' print ' or: get_args.py --file=<file> --country=<country> --version=<version>' sys.exit(2) for opt, arg in options: if opt in ("-h", "--help"): print 'get_args.py -f <file> -c <country> -v <version>' print 'or: get_args.py --file=<file> --country=<country> --version=<version>' sys.exit() elif opt in ("-f", "--file"): file = arg elif opt in ("-c", "--country"): country = arg elif opt in ("-v", "--version"): version = arg for i in range(0, len(args)): print "args[{0}] = {1}".format(i, args[i]) print 'file : ', file print 'country : ', country print 'version : ', version if __name__ == "__main__": # 注意这里要排除 argv[0],它是本脚本名,不算做命令行参数 main(sys.argv[1:])
短参数测试
命令行中输入:
python D023_get_args_getopt.py -f data.csv -c china -v 6.3.2 a 2
输出:
args[0] = a args[1] = 2 file : data.csv country : china version : 6.3.2
长参数测试
命令行中输入:
python D023_get_args_getopt.py --file=data.csv --country=china --version=6.3.2 a 3
输出:
args[0] = a args[1] = 3 file : data.csv country : china version : 6.3.2