详解python的argpare和click模块小结

一、argparse模块

1、模块说明

# argparse是python的标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块,argparse能够根据程序中的定义的sys.argv中解析出这些参数,

# 并自动生成帮助和使用信息

2、模块常用的参数

# 参数说明:
# name/flag:参数的名字
# action:遇到参数的动作,默认值是store
# nargs:参数的个数,可以是具体的数字,或者是+或者是*,*表示0个或者多个参数,+号表示1个或者多个参数
# default:不指定参数时的默认值
# type:# 参数的类型
# choice:参数允许的值
# required:可选参数是否可以省略
# help:参数的帮助信息
# dest:解析后参数的名称 

  

3、使用方法

import argparse
def _argparse():
 parseobj = argparse.ArgumentParser(description="This is script help")
 # 参数说明:
 # name/flag:参数的名字
 # action:遇到参数的动作,默认值是store
 # nargs:参数的个数,可以是具体的数字,或者是+或者是*,*表示0个或者多个参数,+号表示1个或者多个参数
 # default:不指定参数时的默认值
 # type:# 参数的类型
 # choice:参数允许的值
 # required:可选参数是否可以省略
 # help:参数的帮助信息
 # dest:解析后参数的名称
 parseobj.add_argument("--host",action='store',dest='host',required=True,default="127",help="This is a host ip address",type=int)

 parseobj.add_argument("--P",'--passwd',action='store', dest='pwd', required=True, default="admin123.",help="This is a host password", type=str)
 parseobj.add_argument("--V", '--version', action='version', version="%(prog)s 0.1")
 return parseobj.parse_args()
if __name__ == '__main__':
 res = _argparse()
 print(res.pwd)
 print(res.host)

4、最后我们测试一下这个模块

a、测试 -h选项,这里-h和--help的效果是一样的

b、测试--V选项和--version选项

c、测试一下输入的正确的参数

二、click模块

1、模块介绍

click模块的作者就是Flask的作者,(Armin Ronacher)开发的一个第三方的模块,用于快速创建命令行。他的作用用python标准库中的argparse相同,但是

使用更加简单,click相对于标准库的argparse,就好比requests库相当于标准库的urllib库,click是一个第三的库,因此在使用之前需要安装

2、模块安装

E:\python3\Scripts>pip3.6.exe install click

3、使用步骤

a、使用@click.command()装饰一个函数,使之成为命令行的接口

b、使用@click.option()等装饰函数,为其添加命令行选项等

c、先看一个官方的例子

import click

# click模块的作者就是Flask的作者,(Armin Ronacher)开发的一个第三方的模块,用于快速创建命令行。他的作用用python标准库中的argparse相同,但是

# 使用更加简单,click相对于标准库的argparse,就好比requests库相当于标准库的urllib库,click是一个第三的库,因此在使用之前需要安装

@click.command()

@click.option('--count',default=1,help='Number of greetings')

@click.option('--name',prompt='your name',help='The person to greet')

def hello(count,name):

 for x in range(count):

  click.echo("hello {name}".format(name = name))

if __name__ == '__main__':

 hello()

其他的应该大家都可以看懂,这个prompt的作用是什么呢,实际就是如果我们没有为name传参数,他就会给出一个提示

下面这个例子是完整的传参

4、常用参数

常用参数

default:设置命令行参数的默认值

help:参数说明

type:参数的类型,可以是string,int,float

prompt:当在命令行中没有输入相应的参数,会根据prompt提示用户输入

nargs:指定命令行参数接受的值的个数  

a、测试一下nargs参数

@click.command()
@click.option('--post',nargs=2,help='Number of post')
def hello(post):
 print(post)

if __name__ == '__main__':
 hello()

测试结果

b、测试click.choice选项

@click.command()
@click.option('--hash',type=click.Choice(["md5","sha1"]),help='type of hash')
def hello(hash):
 print(hash)
if __name__ == '__main__':
 hello()

测试结果

c、如果使用命令行输入密码,则默认的情况是有很大的安全隐患的,因为输入密码的命令在history中,其他用户就可以通过命令的历史列表,拿到我们的密码,click可以为我们解决这个问题

@click.command()
@click.option('--pwd',prompt=True,hide_input=True,help='passwd of user',confirmation_prompt=True)
def hello(pwd):
 print(pwd)
if __name__ == '__main__':
 hello()

prompt:要设置为True

hide_input:要设置为True

confirmation_prompt:会自动为我们进行密码的二次验证

测试结果如下

错误的输入

正确的输入

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解DeBug Python神级工具PySnooper

    PySnooper 在 GitHub 上自嘲是一个"乞丐版"调试工具(poor man's debugger). 一般情况下,在编写 Python 代码时,如果想弄清楚为什么 Python 代码没有按照预期执行.哪些代码在运行哪些没在运行.局部变量又是什么,我们会使用包含断点和观察模式等功能的调试器,或者直接使用 print 语句打印出来. 但上面的方法都比较麻烦,例如使用调试器需要进行繁琐的设置,使用 print 打印也要很仔细.与它们相比,使用 PySnooper 只需为要调试的函

  • python命令行工具Click快速掌握

    前言 写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它.命令行工具中用起来最爽的就是 Click,它是 Flask 的团队 pallets 的开源项目.Click 只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣. 百闻不如一试 安装 pip install Click 使用 创建 click_demo.py ,写一个最简单的函数 import click @click.co

  • Python中强大的命令行库click入门教程

    前言 我们的游戏资源处理工具是Python实现的,功能包括csv解析,UI材质处理,动画资源解析.批处理,Androd&iOS自动打包等功能.该项目是由其他部门继承过来的,由于绝大部分代码不符合我们的业务需求,所以进行了大重构.删除了所有业务代码,仅保留了python代码框架.项目中命令行参数解析是自己实现的,极其不优雅,也忍了这么久.打算找时间用click重写.所以最近学习了click,下面本文的内容是click的入门教程,初学者们可以来一起学习学习. 官网镜像地址: http://click

  • python代理工具mitmproxy使用指南

    前言 mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,可以用来拦截.修改.保存 HTTP/HTTPS 请求.以命令行终端形式呈现,操作上类似于Vim,同时提供了 mitmweb 插件,是类似于 Chrome 浏览器开发者模式的可视化工具. 它是基于Python开发的开源工具,最重要的是它提供了Python API,你完全可以通过Python代码来控制请求和响应,这是其它工具所不能做到的,这点也是我喜欢这个工具的原因之一. 安装 sudo pip

  • 远程部署工具Fabric详解(支持Python3)

    前言 如果你搜一圈 "Fabric "关键字,你会发现 90% 的资料都是过时的,因为现在 Fabric 支持 Python3,但是它又不兼容旧版 Fabric.所以,如果你按照那些教程去操作的话根本跑不通. 如果你还没用过 Fabric,那么这篇文章就是帮你快速上手 Fabric 的.不管你现在用不用,先了解了以后也用得着. 平时我们的开发流程是这样,经过几个月奋战,项目终于开发完了,测试也没问题了,我们就把代码提交到 GitHub 那样的托管平台,准备部署到正式环境.你小心翼翼地登

  • Python实用工具FuckIt.py介绍

    说起 Python 强大的地方,你可能想到是它的优雅.简洁.开发速度快,社区活跃度高.但真正使得这门语言经久不衰的一个重要原因是它的无所不能,因为社区有各种各样的第三库,使得我们用Python实现一个东西实在是太简单了,你经常会看到几行代码实现爬虫,10行代码实现人脸识别,虽然有些夸张,但确实就是有这样的库帮你把所有的繁文缛节全部封装了,最后给你开放一个优雅的 API. 今天给你推荐的这个库叫 "FuckIt.py",名字一看就是很黄很暴力的那种,作者是这样介绍它的: FuckIt.p

  • 详解python的argpare和click模块小结

    一.argparse模块 1.模块说明 # argparse是python的标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块,argparse能够根据程序中的定义的sys.argv中解析出这些参数, # 并自动生成帮助和使用信息 2.模块常用的参数 # 参数说明: # name/flag:参数的名字 # action:遇到参数的动作,默认值是store # nargs:参数的个数,可以是具体的数字,或者是+或者是*,*表示0个或者多个参数,+号表示1个或者多个参数 # d

  • 详解python 3.6 安装json 模块(simplejson)

    JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象. JSON(Java Script Object Notation):一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集. python2.6版本开始加入了JSON模块,python的j

  • 详解Python中contextlib上下文管理模块的用法

    咱们用的os模块,读取文件的时候,其实他是含有__enter__ __exit__ .  一个是with触发的时候,一个是退出的时候. with file('nima,'r') as f: print f.readline() 那咱们自己再实现一个标准的可以with的类. 我个人写python的时候,喜欢针对一些需要有关闭逻辑的代码,构造成with的模式 . #encoding:utf-8 class echo: def __enter__(self): print 'enter' def __

  • 详解python之协程gevent模块

    Gevent官网文档地址:http://www.gevent.org/contents.html 进程.线程.协程区分 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程. 在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程. 进程和协程 下面对比一下进程和协程的相同点和不同点: 相同点: 相同点存在于,当我们挂起一个执行流的时,我们要保存的东西: 栈, 其实在你切换前你的局部变量,以及

  • 详解Python中的array数组模块相关使用

    初始化 array实例化可以提供一个参数来描述允许那种数据类型,还可以有一个初始的数据序列存储在数组中. import array import binascii s = 'This is the array.' a = array.array('c', s) print 'As string:', s print 'As array :', a print 'As hex :', binascii.hexlify(a) 数组配置为包含一个字节序列,用一个简单的字符串初始化. >>> =

  • 详解python中的三种命令行模块(sys.argv,argparse,click)

    Python作为一门脚本语言,经常作为脚本接受命令行传入参数,Python接受命令行参数大概有三种方式.因为在日常工作场景会经常使用到,这里对这几种方式进行总结. 命令行参数模块 这里命令行参数模块平时工作中用到最多就是这三种模块:sys.argv,argparse,click.sys.argv和argparse都是内置模块,click则是第三方模块. sys.argv模块(内置模块) 先看一个简单的示例: #!/usr/bin/python import sys def hello(name,

  • 详解Python import方法引入模块的实例

    详解Python import方法引入模块的实例 在Python用import或者from-import或者from-import-as-来导入相应的模块,作用和使用方法与C语言的include头文件类似.其实就是引入某些成熟的函数库和成熟的方法,避免重复造轮子,提高开发速度. python的import方法可以引入系统的模块,也可以引入我们自己写好的共用模块,这点和PHP非常相似,但是它们的具体细节还不是很一样.因为php是在引入的时候指明引入文件的具体路径,而python中不能够写文件路径进

  • 详解Python文本操作相关模块

    详解Python文本操作相关模块 linecache--通过使用缓存在内部尝试优化以达到高效从任何文件中读出任何行. 主要方法: linecache.getline(filename, lineno[, module_globals]):获取指定行的内容 linecache.clearcache():清除缓存 linecache.checkcache([filename]):检查缓存的有效性 dircache--定义了一个函数,使用缓存读取目录列表.使用目录的mtime来实现缓存失效.此外还定义

  • 详解Python自建logging模块

    简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = logging.getLogger() logging.basicConfig() logger.setLevel('DEBUG') logger.debug('logsomething') #输出 out>>DEBG:root:logsomething 第一步,通过logging.getLogger函数,获取一个loger对象,但这个对象暂时是无法使用的. 第二步,loggi

  • 详解python中asyncio模块

    一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? 异步网络操作并发协程 python3.0时代,标准库里的异步网络模块:select(非常底层) python3.0时代,第三方异步网络库:Tornado python3.4时代,asyncio:支持TCP,子进程 现在的asyncio,有了很多的模块已经在支持:aiohttp,ai

随机推荐