命令行解析工具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. 20165205 实验一 java开发环境的熟悉 实验报告

    20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...

  2. 29.如何不用 transition 和 animation 也能做网页动画

    原文地址:https://segmentfault.com/a/1190000014964220 感想:动画效果运用了具有滚动效果的marquee标签 HTML代码: 注释:  <!-- mar ...

  3. kubernetes组件架构

    kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效( ...

  4. redisCluster 使用 pipeline功能

    Redis从3.0版本后引入了令人兴奋的cluster集群模式,相信很多人都尝试过了,在高兴之余却发现redis官方的cluster对于Java客户端的jedis支持却不是很好,至少目前的版本clus ...

  5. centos 7 端口

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

  6. C语言中的__LINE__宏

    在C语言中,有这么四个预定义的宏: 当前文件: __FILE__ 当前行号: __LINE__ 当前日期: __DATE__ 当前时间: __TIME__ 这4个宏在代码编译的时候,由编译器替换成实际 ...

  7. 【开发工具】 JEECG_3.7新版开发工具

    链接:http://pan.baidu.com/s/1gfthmAf    密码:2yfv

  8. linux下通过sed命令直接修改文件内容

    sed是实现对流的编辑.通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件.但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的 ...

  9. Oracle 学习总结 - 内存优化

    实例内存优化 开启自动内存管理 1. 设置memory_max_target alter system set memory_max_target=1G scope=spfile; /*init.or ...

  10. Jmeter的安装与使用

    安装Jmeter之前需要先配置Java环境   当配置完Jmeter运行的环境之后,就可以开始安装Jmeter了. 为什么既要告诉各位"在Linux系统内安装Jmeter",又要告诉各位"在Windo ...