python基础____学习笔记17 (命令行参数解析)
一、使用argparse 解析命令行参数
argparse 函数 ArgumentParser() 来创建一个解析器,该解析器调用add_argument() 来创建不同的参数选项,参数action触发不同的配置
action 支持值:
- store:默认action模式,存储值到指定变量。
- store_const:存储值在参数的const部分指定,多用于实现非布尔的命令行flag。
- store_true / store_false:布尔开关。可以2个参数对应一个变量。
- append:存储值到列表,该参数可以重复使用。
- append_const:存储值到列表,存储值在参数的const部分指定。
- version:输出版本信息然后退出。
default:
没有设置值情况下的默认参数
type:参数类型
- str 默认值
- int
- bool
- float
required:
如果设置了required=True,则在实际运行的时候不设置该参数将报错
choices:
参数值只能从几个选项里面选择
dest:
设置参数在代码中的变量名
nargs:
设置参数在使用可以提供的个数
例子: 运行python 程序,需要提供主机名,端口号 、用户名、密码、
import argparsedef _argparase():parse = argparse.ArgumentParser('cmd line parse')# 添加主机名参数 变量名为host, 必须填parse.add_argument('--host', action='store', dest='host', help='Server IP to use for connection',default='192.168.2.5', type=str, required=True)# 添加端口号参数 变量名为port, 默认9908, int类型,非必填parse.add_argument('-P', '--port', action='store', dest='port', help='port number to use for connection',default=9908, type=int, required=False)# 添加用户名参数 变量名为user, 必须填parse.add_argument('-u', '--user', action='store', dest='user', required=True)# 添加密码参数 变量名为passwd, 必须填parse.add_argument('-p', action='store', dest='passwd', required=True)#parse.add_argument('-v','--version', action='version', version='%(prog)s 2.0')# 返回的是一个字典return parse.parse_args()if __name__ == '__main__':parser = _argparase()# 创建字典connArg = dict(host=parser.host, port=parser.port, user=parser.user, passwd=parser.passwd)print(connArg)
可以自动生成帮助信息
#python3 argparaseTest.py --help
usage: cmd line parse [-h] --host HOST [-P PORT] -u USER -p PASSWD [-v]optional arguments:-h, --help show this help message and exit--host HOST Server IP to use for connection-P PORT, --port PORT port number to use for connection-u USER, --user USER-p PASSWD-v, --version show program's version number and exit
#python3 main.py --host=192.168.2.150 -P=9910 -u=kai -p=123456输出
{'host': '192.168.2.150', 'user': 'kai', 'passwd': '123456', 'port': 9910}
参考资料: https://docs.python.org/3/library/argparse.html
二、使用Click 模块解析命令行参数
click 官方文档:https://click.palletsprojects.com/en/7.x/
Click对argparse的主要改在在于易用性,使用click模块主要分为两个步骤:
- 使用@click.command() 装饰一个函数,使之成为命令行接口
- 使用@click.option() 等装饰函数,为其添加命令行选项
下列为click官方提供的例子:
import 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):"""Simple program that greets NAME for a total of COUNT times.""" # 会当作help信息进行输出for x in range(count):click.echo('Hello %s!' % name)
if __name__ == '__main__':hello()
echo :输出结果,使用 echo 进行输出是为了获得更好的兼容性,兼容 python2 和python3
click.option 最基本的用法就是通过指定命令行选项的名称,从命令行读取参数值,再将其传递给函数。我们除了设置命令行选项的名称,我们还会指定默认值,help 说明等,
option 常用的设置参数如下:
- default: 设置命令行参数的默认值
- help: 参数说明
- type: 参数类型,可以是 str, int, float 等
- prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入可以指定 True或特定字符串来提示用户输入
- nargs: 指定命令行参数接收的值的个数, -1 表示可以接收多个参数
- required:是否是必填参数
和 argparse类似,--help 也能显示帮助信息
#python3 clickTest.py --help
Usage: clickTest.py [OPTIONS]Simple program that greets NAME for a total of COUNT times.Options:--count INTEGER Number of greetings.--name TEXT The person to greet.--help Show this message and exit.
例1:
若参数需要提供 主机名,端口号 、用户名、密码、位置、加密方式
import click@click.command()
@click.option('--serverip', type=str, prompt='Input Server Ip address',required=True)
@click.option('--serverport',type=int, default=9988,prompt='Input Server Port',required=False)
@click.option('--user', type=str, prompt='Input user name',required=True)
@click.option('--passwd', type=str, prompt='Input user passwrod',required=True)
@click.option('--pos', nargs=2 , type=int,prompt='Input Pos info x y',required=False)
@click.option('--encode', type=click.Choice(['md5','sha1']), prompt='Input encode way',required=False)
def getcommand(serverip,serverport,user,passwd,pos,encode):click.echo(serverip)click.echo(serverport)click.echo(user)click.echo(passwd)click.echo(pos)click.echo(encode)
if __name__ == '__main__':getcommand()
在控制台执行命令:
# python3 clickTest.py --serverip 192.168.2.5 --serverport 9898 --user root --passwd 123456 --pos 78 91 --encode sha1192.168.2.5
9898
root
123456
(78, 91)
sha1
注意: 参数名 serverip 这些都不能包含大写字母
例2:
密码输入. argparse 模块输入的密码 保存到了history中,通过查看历史列表能看到输入的密码,click 能很好解决这个问题,设置hide_input为True,就能隐藏密码,设置confirmation_prompt为True,就可以进行密码的两次验证,
import click
@click.command()
@click.option('-p', prompt='Your Password', hide_input=True, confirmation_prompt=True)
def getpassword(p):click.echo('Your Password is : %s' % p)if __name__ == '__main__':print(------'in main---------')getpassword()
例3: click.argument
使用@click.option 来添加可选参数,使用 @click.argument 来添加固定参数。他的功能比@click.option 少
import click@click.command()
@click.option('--count', type=int, default=2, help='the max time try to open file')
@click.argument('filename')
def touch(count, filename):for x in range(count):click.echo(filename)if __name__ == '__main__':touch()
例4: command 和group
import click@click.group()
@click.option('--count', type=int, default=2, help='the max time try to open file')
def touch(count):for x in range(count):click.echo('----111---')@touch.command()
def openfile():click.echo('open file')@touch.command()
def closefile():click.echo('close file')if __name__ == '__main__':touch()
@click.group 装饰器把touch方法装饰为可以拥有多个子命令的Group对象, 该Group对象通过 @touch.command 装饰将 openfile方法、closefile方法 设置为它的子命令
root@kaifa:/mnt/hgfs/Ubuntu_Share# python3 clickTest.py --count 3 closefile
----111---
----111---
----111---
close file
注意; 运行时 必须添加 一个子命令,并且只能由一个.
python基础____学习笔记17 (命令行参数解析)相关推荐
- 命令行参数tail c语言,osg学习笔记2, 命令行参数解析器ArgumentParser
php简单实现socket通信 socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究 ...
- Objective-C学习笔记_命令行参数获取
找到编译目录下执行myapp >./myapp param1 param2 在应用中可以这样来获取param1/param2 NSProcessInfo *proc = [NSProcessIn ...
- Python基础语法学习笔记
Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...
- Python基础知识学习笔记——Matplotlib绘图
Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...
- python基础知识学习笔记(2)
python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...
- python基础知识学习笔记(1)
python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...
- Python基础知识学习笔记(一)
Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...
- 大数据第二阶段Python基础编程学习笔记(待完善)
大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...
- python基础入门学习笔记 (2)
python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器:高级语言与机器之间的翻译官 2 值传递: print "a = ",a print &q ...
最新文章
- C++动态二维数组演示的代码
- 软工1816 · Alpha冲刺(9/10)
- [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)
- 大数据面临的挑战:当大数据遭遇云计算
- 操作系统【二】死锁问题以及处理方法
- 【POJ - 3125 】Printer Queue(模拟,队列+优先队列,STL)
- 2015必须推荐的Android框架,猿必读系列!
- 蓝桥杯 ADV-11 算法提高 Torry的困惑(提高型)
- java仿QQ2.0版(一直忘了更)
- RPA机器人自动调用U盾方案
- 51单片机最小系统原理分析
- 基于PyTorch的C++API运行模型进行图像分类
- js每日一题(10)
- 楚留香获取服务器信息卡主,楚留香手游沧海主线任务bug原因及解决方法一览
- PHP 图片转base64编码 和 base64编码字符串转换成图片保存
- windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息
- 凯撒密码C语言去掉空格字符,凯撒密码C语言实现
- go语言google pay支付验证订单
- 五月的仓颉大神写的 三年java程序员面试感悟 分享给大家
- 祥云代代刷源码v8.94 卡密个人发卡平台
热门文章
- java的prefetch()_Prefetch和预加载实践
- 航空机票APP的设计与实现【AS开发+SQLITE】【附源码】
- Beep函数 夜空中最亮的星 C语言
- python 医学文献检索(包括文献图片中的文字)
- 《从一到无穷大》阅读笔记2
- currentstyle 织梦_dede织梦 arclist标签完美支持currentstyle属性
- HBase官方文档 之 Region的相关知识
- X射线的量子特性 制造“幽灵”生物分子
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
- “酒店装修,暂停营业”的真相