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中关键字is与==的区别简述
Jul 31 Python
Python学习笔记之os模块使用总结
Nov 03 Python
Python实现拼接多张图片的方法
Dec 01 Python
详解python单例模式与metaclass
Jan 15 Python
django 常用orm操作详解
Sep 13 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Python2与Python3的区别实例分析
Apr 11 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
浅析Python3 pip换源问题
Jan 06 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
基于Python的OCR实现示例
Apr 03 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
Feb 01 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
js评分组件使用详解
2017/06/06 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python try except 捕获所有异常的实例
2018/10/18 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
python字符串的index和find的区别详解
2020/06/20 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
EJB发布WEB服务一般步骤
2012/10/31 面试题
工作自我评价怎么写
2014/01/29 职场文书
《在家里》教后反思
2014/03/01 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
数字化校园建设方案
2014/05/03 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
大学生见习报告范文
2014/11/03 职场文书
支行行长竞聘报告
2014/11/06 职场文书
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android