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

By:授客 QQ:1033553122

#代码实践1

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 study.py -i127.0.0.1 # 注意,参数和参数值之间可以没有空格

结果如下

python study.py -notExists 1

结果如下

如上,以上代码实现是针对单个模块脚本,如果要在多个模块中使用咋办?解决方法为封装为类,具体参见“代码实践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模块实现脚本命令行参数解析的更多相关文章

  1. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  2. $命令行参数解析模块argparse的用法

    argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...

  3. Python命令行参数解析模块getopt使用实例

    Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...

  4. os模块sys模块-sys.argv命令行参数

    提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于s ...

  5. Python 中命令行参数解析工具 docopt 安装和应用

    什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制. ...

  6. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  7. optparse(命令行参数解析工具)

    在用Python做自动化的时候,命令行的解析一定是少不了的,有很多命令行解析工具库,其中Python内建的一个库optparse,还是比较好用的 1.贴代码并注释 # coding=UTF-8 fro ...

  8. gflags命令行参数解析

    gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...

  9. [Go] 命令行参数解析包(flag 包)使用详解

    Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag       // 只支持bool类型 cmd -flag=xxx cmd -flag ...

  10. Google开源命令行参数解析库gflags

    Google开源命令行参数解析库gflags http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog ...

随机推荐

  1. [COCI2008-2009 #2] PERKET

    传送锚点:https://www.luogu.com.cn/problem/P2036 题目描述 Perket 是一种流行的美食.为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽 ...

  2. FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

    ​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10.Mozilla Daala以及Cis ...

  3. ASP.NET Core SignalR .NET 客户端

    项目 2022/11/29 13 个参与者 反馈 通过 ASP.NET Core SignalR .NET 客户端库可以从 .NET 应用与 SignalR 中心进行通信. 查看或下载示例代码(如何下 ...

  4. 全网最全100个AI工具导航网站合集

    随着ChatGPT年前的爆火,人工智能也变成当今最热门的领域之一,它正在改变着我们的生活和工作方式.无论你是想要学习人工智能的基础知识,还是想要利用人工智能来提升你的业务效率和创新能力,都需要找到合适 ...

  5. 机器学习策略篇:详解可避免偏差(Avoidable bias)

    可避免偏差 如果希望学习算法能在训练集上表现良好,但有时实际上并不想做得太好.得知道人类水平的表现是怎样的,可以确切告诉算法在训练集上的表现到底应该有多好,或者有多不好,让我说明是什么意思吧. 经常使 ...

  6. nginx基础安装使用和负载均衡高可用,日志切割配置

    1. Nginx简介 Nginx [engine x]是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器,最初由Igor Sysoev编写.很长一段时间以来,它已经在许多重负 ...

  7. Redis数据存储和读写

    今天工作群里,有小伙伴问了一个问题,从Redis获取的数据,一会是0,一会是OK. 这引起了我们对Redis数据存储和读写的疑问. 以下是整理的一些技术研究内容. 在 Redis 中,所有的数据存储都 ...

  8. kubernetes(k8s)

    应用程序部署的演变过程 在部署应用程序的方式上,主要经历了三个时代 传统部署 互联网早期,会直接将应用程序部署在物理机上 优点: 简单,不需要其他技术的参与 缺点: 不能为应用程序定义资源使用边界,很 ...

  9. Windows10 LTSC版,比Win7还干净

    在Windows操作系统的发展历程中,每一个版本都承载着微软对用户需求的深度理解和技术创新.其中,Windows 7以其稳定.高效和简洁的特点,赢得了众多用户的喜爱. 然而,随着技术的不断进步和用户需 ...

  10. 关于excel表

    对excel表的操作主要通过xlwt,xlrd模块. 创建excel表 import xlwtworkbook = xlwt.Workbook(encoding='utf-8') worksheet ...