Python 利用argparse模块实现脚本命令行参数解析


Posted in Python onDecember 28, 2020

study.py内容如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__ = 'shouke'
 
import argparse
 
def argparseFunc():
 '''
 基于argparse模块实现命令参数解析功能
 执行示例:
  python study.py -i 172.19.7.236 -p 8080 -a -r
  python study.py --ip 172.19.7.236 --port 7077 --auth -w -v True
 '''
 
 parser = argparse.ArgumentParser(description="study.py usage help document")
 # 添加不带默认值的可解析参数
 parser.add_argument("-i", "--ip", help="ip addr") #注意: -h、--help为内置参数,不可用
 parser.add_argument("-p", "--port",help="host port")
 
 # 添加带默认值的可解析参数(# action = store_true 表示是如果使用了这个参数,则值参数值设置为True # 更多action配置可参考源码
 # 需要注意的是,不能为带默认值参数指定参数值,会报错,该参数值会被当作不识别的参数
 parser.add_argument("-a", "--auth", help="if auth need", action="store_true")
 
 
 # 添加互斥参数(比如 例中的-r和-w 同时只能用一个)
 exclusive_group = parser.add_mutually_exclusive_group()
 exclusive_group.add_argument("-r","--read", help="read enabled" , action="store_true")
 exclusive_group.add_argument("-w","--write", help="write enabled", action="store_true")
 
 # 添加参数时不设置设置参数说明
 parser.add_argument('-v') # show verbose
 
 # 添加参数时不设置参数全名
 parser.add_argument('-V', help="version")
 
 ARGS = parser.parse_args() # 获取命令行参数
 print('ARGS:', ARGS)
 
 # 获取某个参数值
 if ARGS.ip: # 注意,这里的参数名,必须使用参数全称
 print("host addr is: %s" % ARGS.ip)
 
 if ARGS.port:
 print("host port is: : %s" % ARGS.port)
 
 if ARGS.auth:
 print("auth need: : %s" % ARGS.auth)
 
 if ARGS.read:
 print("read enabled: %s" % ARGS.read)
 
 if ARGS.write:
 print("write enabled: %s" % ARGS.write)
 
argparseFunc()

运行测试

python study.py -i 172.19.7.236 -p 8080 -a -r
python study.py --ip 172.19.7.236 --port 7077 --auth -w -v True

结果如下

Python 利用argparse模块实现脚本命令行参数解析

python study.py -i127.0.0.1 # 注意,参数和参数值之间可以没有空格

结果如下

Python 利用argparse模块实现脚本命令行参数解析

python study.py -notExists 1

结果如下

Python 利用argparse模块实现脚本命令行参数解析

如上,以上代码实现是针对单个模块脚本,如果要在多个模块中使用咋办?解决方法为封装为类,具体参见“代码实践2”

#代码实践2

argument_parser.py
 
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
 
'''
@Author : shouke
'''
 
 
import argparse
 
class ArgParser(object):
 '''
  参数解析器
 '''
 
 
 def __init__(self, none_exclusive_arguments, exclusive_arguments, description=''):
  self.parser = argparse.ArgumentParser(description=description)
 
  self.add_none_exclusive_arguments(none_exclusive_arguments)
  self.add_exclusive_arguments(exclusive_arguments)
 
 def add_none_exclusive_arguments(self, options:list):
  '''
  添加常规选项(非互斥选项)
  :param options 格式为list类型,形如
  [
   '"-a", "--all", help="do not ignore entries starting with ."',
   '"-b", "--block", help="scale sizes by SIZE before printing them"',
   '"-C", "--color", help="colorize the output; WHEN can be 'never', 'auto'"',
   '"-flag", help="make flag", action="store_true"', # action="store_true" 表示如果不设置该选项的值,则默认值为true,类似的action="store_false" 表示默认值为false
  ]
  其中,每个list元素为argparse.ArgumentParserlei add_argument类函数实参的字符串表示,add_argument函数定义add_argument(self, *args,**kwargs)
  '''
 
  for option in options:
   eval('self.parser.add_argument(%s)' % option)
 
 
 def add_exclusive_arguments(self, options:list):
  '''
  添加互斥选项
  :param options 格式为list,形如以下
  [
   ('"-r","--read",help="Read Action",action="store_true"',
   '"-w","--write",help="Write Action",action="store_true"')
  ]
 
  '''
  for option_tuple in options:
   exptypegroup = self.parser.add_mutually_exclusive_group()
   for item in option_tuple:
    eval('exptypegroup.add_argument(%s)' % item)
 
 
 @property
 def args(self):
  return self.parser.parse_args()

在xxx.py中引用(注意:为了让参数解析器起到应起的作用,建议在脚本最上方构造参数解析器对象)

study.py内容如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__ = 'shouke'
 
from argument_parser import ArgParser
 
none_exclusive_arguments = [
 '"-ip", help="自动化测试服务平台地址"',
 '"-projectId", help="自动化测试项目id"',
 '"-runEnv", help="自动化测试项目运行环境"',
 '"-logLevel", help="日志级别"',
 '"-masterHost", help="master服务地址"',
 '"-masterPort", help="master服务端口"'
]
 
exclusive_arguments = [
 
 ('"-r", "--read", help="Read Action",action="store_true"',
 '"-w", "--write", help="Write Action",action="store_true"')
]
 
 
args = ArgParser(none_exclusive_arguments, exclusive_arguments).args
 
print(args)
print(args.ip)
print(args.read)

运行测试

python study.py -i 127.0.0.1 -r

运行结果如下

Python 利用argparse模块实现脚本命令行参数解析

到此这篇关于Python 利用argparse模块实现脚本命令行参数解析的文章就介绍到这了,更多相关Python 实现脚本命令行参数解析内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python生成pdf文件的方法
Aug 04 Python
在Python的web框架中编写创建日志的程序的教程
Apr 30 Python
Python读取键盘输入的2种方法
Jun 16 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Django中的FBV和CBV用法详解
Sep 15 Python
Python内置类型性能分析过程实例
Jan 29 Python
Python使用type动态创建类操作示例
Feb 29 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python 负数取模运算实例
Jun 03 Python
详解Python设计模式之策略模式
Jun 15 Python
python 实现一个简单的线性回归案例
Dec 17 Python
python中str内置函数用法总结
Dec 27 #Python
python中温度单位转换的实例方法
Dec 27 #Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 #Python
Python 可视化神器Plotly详解
Dec 26 #Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 #Python
通过python-pptx模块操作ppt文件的方法
Dec 26 #Python
Python如何实现感知器的逻辑电路
Dec 25 #Python
You might like
用PHP开发GUI
2006/10/09 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Vue实现验证码功能
2019/12/03 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
详解python单元测试框架unittest
2018/07/02 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
Keras搭建自编码器操作
2020/07/03 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
2014年应届大学生自我评价
2014/01/09 职场文书
小学英语课后反思
2014/04/26 职场文书
社区低保工作总结2015
2015/07/23 职场文书
关于五一放假的通知
2015/08/18 职场文书
golang中的空接口使用详解
2021/03/30 Python
java泛型通配符详解
2021/07/25 Java/Android