一、使用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 (命令行参数解析)相关推荐

  1. 命令行参数tail c语言,osg学习笔记2, 命令行参数解析器ArgumentParser

    php简单实现socket通信 socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究 ...

  2. Objective-C学习笔记_命令行参数获取

    找到编译目录下执行myapp >./myapp param1 param2 在应用中可以这样来获取param1/param2 NSProcessInfo *proc = [NSProcessIn ...

  3. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  4. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

  5. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

  6. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  7. Python基础知识学习笔记(一)

    Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...

  8. 大数据第二阶段Python基础编程学习笔记(待完善)

    大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...

  9. python基础入门学习笔记 (2)

    python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器:高级语言与机器之间的翻译官 2 值传递: print "a = ",a print &q ...

最新文章

  1. C++动态二维数组演示的代码
  2. 软工1816 · Alpha冲刺(9/10)
  3. [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)
  4. 大数据面临的挑战:当大数据遭遇云计算
  5. 操作系统【二】死锁问题以及处理方法
  6. 【POJ - 3125 】Printer Queue(模拟,队列+优先队列,STL)
  7. 2015必须推荐的Android框架,猿必读系列!
  8. 蓝桥杯 ADV-11 算法提高 Torry的困惑(提高型)
  9. java仿QQ2.0版(一直忘了更)
  10. RPA机器人自动调用U盾方案
  11. 51单片机最小系统原理分析
  12. 基于PyTorch的C++API运行模型进行图像分类
  13. js每日一题(10)
  14. 楚留香获取服务器信息卡主,楚留香手游沧海主线任务bug原因及解决方法一览
  15. PHP 图片转base64编码 和 base64编码字符串转换成图片保存
  16. windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息
  17. 凯撒密码C语言去掉空格字符,凯撒密码C语言实现
  18. go语言google pay支付验证订单
  19. 五月的仓颉大神写的 三年java程序员面试感悟 分享给大家
  20. 祥云代代刷源码v8.94 卡密个人发卡平台

热门文章

  1. java的prefetch()_Prefetch和预加载实践
  2. 航空机票APP的设计与实现【AS开发+SQLITE】【附源码】
  3. Beep函数 夜空中最亮的星 C语言
  4. python 医学文献检索(包括文献图片中的文字)
  5. 《从一到无穷大》阅读笔记2
  6. currentstyle 织梦_dede织梦 arclist标签完美支持currentstyle属性
  7. HBase官方文档 之 Region的相关知识
  8. X射线的量子特性 制造“幽灵”生物分子
  9. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
  10. “酒店装修,暂停营业”的真相