多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 1. argparse输入命令解析 ### 1.1 入门范例 > * --output表示可选,-o表示output的缩写,都是可选参数。可以不输入,-表示缩写 ~~~ #coding=utf-8 import argparse #命令行输入参数处理 parser = argparse.ArgumentParser() parser.add_argument('file') #输入文件 parser.add_argument('file1') #输入文件 parser.add_argument('-o', '--output') #输出文件 parser.add_argument('--width', type = int, default = 50) #输出字符画宽 parser.add_argument('--height', type = int, default = 30) #输出字符画高 #获取参数 args = parser.parse_args() IMG = args.file IMG2 = args.file1 WIDTH = args.width HEIGHT = args.height OUTPUT = args.output # 不能用-o缩写 print("IMG is %s" %(IMG)) print("IMG is %s" %(IMG2)) print("WIDTH is %d" %(WIDTH)) print("HEIGHT is %d" %(HEIGHT)) print("OUTPUT is %s" %(OUTPUT)) ~~~ ![](https://box.kancloud.cn/9715cca53cd19512f90c53c1d9e67525_1039x201.png) 注意固定位置的参数顺序 1. 只输入固定参数 ~~~ tuna@docker02:~/python-shell$ python args.py test.png IMG is test.png WIDTH is 50 HEIGHT is 30 OUTPUT is None ~~~ 2. 用-o缩写 ~~~ tuna@docker02:~/python-shell$ python args.py test.png --width 30 --height 50 -o output.txt IMG is test.png WIDTH is 30 HEIGHT is 50 OUTPUT is output.txt ~~~ 3. 用--ouput全写 ~~~ tuna@docker02:~/python-shell$ python args.py test.png --width 30 --height 50 --output output.txt IMG is test.png WIDTH is 30 HEIGHT is 50 OUTPUT is output.txt tuna@docker02:~/python-shell$ ~~~ ### 1.2 参数详解 1. ~~~ import sys, redis, json, re, struct, time, socket, argparse parser = argparse.ARGUMENTPARSER(description='Zabbix Redis status script') parser.add_argument('redis_hostname',nargs='?') parser.add_argument('metric',nargs='?') parser.add_argument('db',default='none',nargs='?') parser.add_argument('-p','--port',dest='redis_port',action='store',help='Redis server port',default=6379,type=int) parser.add_argument('-a','--auth',dest='redis_pass',action='store',help='Redis server pass',default=None) args = parser.parse_args() ~~~ > * args = parse_args() 会返回一个命名空间,只要你添加了一个可选项,比如 metric,它就会把 metric 加到 args 里去,就可以直接通过 args.metric 访问。 > * dest:给参数起别名,'--auth',dest='redis_pass',通过args.redis_pass访问参数auth的值(别名) * store 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。默认action模式,存储值到指定变量。 2. ~~~ #coding=utf-8 import argparse parser = argparse.ArgumentParser(description='argparse tester') parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true ") parser.add_argument('numbers', type=int, help="numbers to calculate", nargs='+') parser.add_argument('-s', '--sum', help="sum all numbers", action='store_true', default=Tru e) args = parser.parse_args() print("Input:",args.numbers) print ("Result:") results = args.numbers # 返回一个列表 if args.verbose: print("hello world") if args.sum: results = sum(args.numbers)# 对列表进行求和 print("Sum:%s" %results) # 循环打印列表 for i in args.numbers: print(i) ~~~ > * action="store_true" 表示该选项不需要接收参数,直接设定 args.verbose = True,如果不指定 -v,那么 args.verbose 就是 False,不会打印hello world。 ![](https://box.kancloud.cn/fa0ba7a5a065be2139d357e1445925a7_712x224.png) 加入-v,verbose自动设置成了True,没加设置成了False。 * 如果没有action="store_true",必须 -v 1 给verbose设定值。 * nargs 表示限定输入参数的个数 > +:一个或多个 > *:零个或多个 > ?:表示0或1个 > 这里的numbers 输入了多个值