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

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

By:授客 QQ:1033553122

#代码实践1

study.py内容如下

#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = 'shouke'import argparsedef 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 -rpython 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 argparseclass 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 ArgParsernone_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).argsprint(args)print(args.ip)print(args.read)

运行测试

python study.py -i 127.0.0.1 -r

运行结果如下

(0)

相关推荐

  • C#调用python脚本并传递参数的一种方法

    最近正好用python做了一个程序,由于是没有UI界面,使用起来没那么方便,同事建议将他做一个UI界面,方便操作,但又由于不想搞什么QT或者是Tkinter(太麻烦,其实真正的原因是我更擅长C#,手动 ...

  • argparse模块用法实例详解

    argsparse是python的命令行解析的标准模块,内置于python,不需要安装.这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行. 港真的,今天是我第一次学习argsparse ...

  • 多个库,多条路,Python 到底有多少命令行参数解析库?

    橡皮擦,一个逗趣的互联网高级网虫. 本篇博客将为你带来 10 个 Python 中的参数解析库,Python 自带的这些[模块军火库],一定要了解,毕竟多掌握一个库,你解决问题的时候就多了一条路. 文 ...

  • docopt-python式的命令行参数解析器

    docopt是python式的命令行参数解析器,它可以帮助您: 定义命令行应用程序的界面 自动为其生成解析器 docopt基于数十年来在帮助消息和手册页中用于描述程序界面的约定.docopt的界面描述 ...

  • appium+python自动化60-appium命令行参数

    Appium服务器参数 许多Appium 1.5服务器参数已被弃用,以支持-default-capabilities标志. 用法: node . [flags] help 1.cmd端口输入,appi ...

  • python笔记65 - Python3 subprocess执行命令行获取返回结果

    前言 subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值. Popen 是 subprocess的核心,子进程的创建和管理都靠它处理. subproc ...

  • 隐藏进程命令行参数,例如输入密码等高危操作

    前言 启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了. 因此很有必要研究如何隐藏命令行参数中的某些字段,当然做成配置文 ...

  • httprunner学习15-运行用例命令行参数详解

    前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, -he ...

  • Cypress web自动化23-cypress run 命令行参数详解

    前言 非 GUI 模式下命令行运行 cypress,需知道有哪些参数可以使用. 查看命令行参数 输入 -h 查看命令行参数 cypress run -h Runs Cypress tests from ...

  • 如何获取PHP命令行参数

    如何获取PHP命令行参数 使用 PHP 开发的同学多少都会接触过 CLI 命令行.经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET . POST 一样 ...

  • [PHP小课堂]如何获取PHP命令行参数

    [PHP小课堂]如何获取PHP命令行参数 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[xiaoyuezigonggong/149844827]免费得PHP.项目管理学习资料 知乎. ...