命令行解析工具argparse

argparse是python标准库中的模块,利用argparse,可以完成对命令行的参数定义、解析以及后续的处理。一个简单的例子:

# coding:utf-8
import argparse
#定义解析器
parser = argparse.ArgumentParser()
# 单-对外,--双-对内
# 添加参数
parser.add_argument('-v','--version',help="show version",action="store_true")
#解析参数
args = parser.parse_args()
#调用参数
if args.version:
print("this is version: caesar-1.00")

action - 遇到参数时的动作,默认值是store。store_const,表示赋值为const;append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
nargs - 参数的个数,可以是具体的数字,或者是?号,当不指定值时对于Positional argument使用default
default - 不指定参数时的默认值.
type - 参数的类型.
choices - 参数允许的值.
required - 可选参数是否可以省略(仅针对optionals). 
help - 参数的帮助信息,当指定为argparse.SUPPRESS时表示不显示该参数的帮助信息.
metavar - 在usage说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称. 
dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线

python-ceilometerclient

python-ceilometerclient的实现过程,如下:像版本信息、帮助信息、debug模式都在解析器中添加参数进行解析,而ceilometer sample-list、ceilometer query-samples 都会反射获取v2模块中do_sample_list、do_sample_querys 方法,构建sample-list、query-samples子解析器,添加参数sample-list、query-samples并关联对应方法。如此变可执行命令行调用v2包中的方法。

解析器的命令行[--version]版本查询,还支持<subcommand>输入命令。如本人写了个简单的实现,在v1中定义如下方法:

在命令行中调用,通过命令调用其中的打印方法:

其核心实现为子解析器添加方法名参数和关联反射所获取的方法 :具体可参考我的github: https://github.com/CaesarLinsa/ceilometer_TestCase

        subparsers = parser.add_subparsers(metavar='<subcommand>')
submodule = importutils.import_module('Test.cmd.api')
for fn_names in (func for func in dir(submodule) if func.startswith('do_')):
command = fn_names[3:].replace('_','-')
callback = getattr(submodule,fn_names)
desc = callback.__doc__ or ''
help=desc.strip().split('\n')[0]
arguments = getattr(callback,'arguments',[])
subparser = subparsers.add_parser(command, help=help,
description=desc,
add_help=False)
subparser.add_argument('-h', '--help', action='help',
help=argparse.SUPPRESS)
self.subcommands[command] = subparser
for (args, kwargs) in arguments:
subparser.add_argument(*args, **kwargs)
subparser.set_defaults(func=callback)
return parser

python-ceilometerclient命令行(2)的更多相关文章

  1. python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis

    目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...

  2. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

  3. 基于Python与命令行人脸识别项目(系列一)

    Face Recognition 人脸识别 摘要:本项目face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,方便大家使用.对于本项目可以使用 ...

  4. python制作命令行工具——fire

    python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...

  5. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  6. Python解析命令行读取参数 -- argparse模块

    在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...

  7. Python执行命令行

    背景 我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要 使用介绍 Python 中使用命令行可以通过 subpro ...

  8. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  9. Python 的命令行参数处理 optparse->argparse

    optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧 ...

  10. Python 获得命令行参数的方法

    如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?需要模块:sys参数个数:len(sys.argv)脚本名:    sys.argv[0]参数1 ...

随机推荐

  1. ubantu windons 双系统 转自百度经验贴(在选择时区那一块,记得把网线拔了,不然会黑屏)

    Win7下U盘安装Ubuntu14.04双系统步骤详解 | 浏览:38877 | 更新:2014-05-24 18:09 | 标签:u盘 笔 者由于工作需要使用LINUX系统,之前通过Win7上的VM ...

  2. vmware虚拟网络

    VMware 虚拟网络 1.1. 虚拟网卡.虚拟交换机当使用 VMware Workstation 安装一个虚拟机时就会自动安装一块虚拟网此外还可手动给虚拟机添加多块虚拟网卡.交换机用于电(光)信号的 ...

  3. tomcat gzip

    ----------- HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览.相对于普通的浏览过程HTM ...

  4. linux 之 source命令:

    source命令: source命令也称为“点命令”,也就是一个点符号(.).source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录. 用法: source filen ...

  5. 运维工具Ansible安装部署

    http://blog.51cto.com/liqingbiao/1875921 centos7安装部署ansible https://www.cnblogs.com/bky185392793/p/7 ...

  6. 35. Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

    一.原因分析 你安装oracle的时候是连网的,那么listener.ora文件里的HOST=网络给你分配的IP地址,而在你断网的时候就会出现这样的情况. 三.解决办法 方法一:监听器 通过liste ...

  7. container_of使用小结

    先上演示代码 #include <stdio.h> #include <stdlib.h> /* offsetof example */ #include <stddef ...

  8. 对象 Object

    在js 中创建最简单的对象,然后给它添加属性或者方法 示例如下: var obj = new Object(); //或者 var obj = {}; obj.name = '张三'; obj.fun ...

  9. centos 7 端口

    查看端口是否占用 netstat -tlnp|grep 8080 查看已经开放的端口 firewall-cmd --zone=public --list-ports 增加开放端口 firewall-c ...

  10. Mysql 定时任务事件

    参考文献:https://blog.csdn.net/dream_ll/article/details/73499750