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中类的定义、继承及使用对象实例详解
Apr 30 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
详解python中的json的基本使用方法
Dec 21 Python
使用python遍历指定城市的一周气温
Mar 31 Python
Python实现的knn算法示例
Jun 14 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
Python函数中的可变长参数详解
Sep 12 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
Python中Selenium模块的使用详解
Oct 09 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编实现程动态图像的创建代码
2008/09/28 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
JsRender for object语法简介
2014/10/31 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
教育专业自荐书范文
2013/12/17 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
大学活动总结格式
2014/04/29 职场文书
理想演讲稿范文
2014/05/21 职场文书
委托书英文
2015/01/28 职场文书