Python模块学习 - Argparse
argparse模块
在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块。argparse模块能够根据程序中的定义从sys.argv中解析出来这些参数,并自动生成帮助和使用信息。
ArgumentParse解析器
使用argparse解析命令行参数时,首先需要创建一个解析器:
import argparse parser = argparse.ArgumentParser()
ArgumentParser类的初始化函数有多个参数,其中比较常用的是description,它是程序的描述信息,即帮助信息前面的文字。
添加参数选项
为应用程序添加参数选项需要使用ArgrmentParser对象的add_argument方法,该方法的格式如下:
add_argument(name or flag...[, action ] [, nargs ] [, const ] [, default ] [, type ] [, choices ] [, required ] [,help ] [,metavar ] [, dest ]
各个参数含义如下:
- name/flags:参数的名字
- action:遇到参数时的动作,默认值时store。
- nargs:参数的个数,可以时具体的数字,或者是”+“号或者”*“号。其中”*”号表示0或者多个参数,“+”号表示1个或多个参数。
- const action 和 nargs:需要的常量值
- default:不指定参数时的默认值
- type:参数的类型
- choices:参数允许的值
- required:可选参数是否可以省略
- help:参数的帮助信息
- metavar:在usage说明中的参数名称
- dest:解析后的参数名称
action内置的6种动作:
store
# 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。 store_const
# 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。 store_ture/store_false
# 保存相应的布尔值。这两个动作被用于实现布尔开关。 append
#将值保存到一个列表中。若参数重复出现,则保存多个值。 append_const
#将一个定义在参数规格中的值保存到一个列表中。 version
#打印关于程序的版本信息,然后退出
解析参数
解析命令行参数需要用到AgrumentParser对象的parse_args方法,该方法返回一个NameSpace对象。获取对象后,参数值可以通过属性的方式进行访问。由于指定了默认值,那么直接运行,也不会报错
parser.add_argument('-host',action='store',dest='server',default='localhost',help='connect to host')
parser.add_argument('-p',action='store',dest='port',default='3306',help='the port to host')
parser.parse_args()
# parser.parse_args() 存储的值
Namespace(port='3306', server='localhost')
存贮布尔类型的值的时候action,存储为store_true类型。
使用argparse进行参数解析还有另一个好处,它能够根据我们的选项定义自动生成帮助信息。(自动追加-h选项,打印帮助信息)
模仿MySQL客户端的命令参数
import argparse parser = argparse.ArgumentParser(description='A Python-MySQL client') def getparser():
parser.add_argument('--host',action='store',dest='host',required=True,help='connect to host')
parser.add_argument('-u','--username',action='store',dest='user',required=True,help='user for login')
parser.add_argument('-p','--password',action='store',dest='password',required=True,help='password to use when user connecting to server')
parser.add_argument('-P','--port',action='store',dest='port',default=3306,type=int,help='port number to use for connection or 3306 or default')
parser.add_argument('-v','--version',action='version',version='%(prog)s 0.1')
return parser.parse_args() def main():
parser = getparser()
conn_args = dict(host=parser.host,username=parser.user,password=parser.password,port=parser.port)
print(conn_args) if __name__ == '__main__':
main()
PS:如果 port参数可以指定多个参数,那么可以添加 nargs='+'即可。
总结
使用步骤:
1:import argparse
2:parser = argparse.ArgumentParser()
3:parser.add_argument()
4:parser.parse_args()
解释:首先导入该模块;然后创建一个解析对象;然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;最后调用parse_args()方法进行解析;解析成功之后即可使用。
更详细的使用方法参考:https://docs.python.org/3/library/argparse.html
Python模块学习 - Argparse的更多相关文章
- 【目录】Python模块学习系列
目录:Python模块学习笔记 1.Python模块学习 - Paramiko - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...
- 【转】Python模块学习 - fnmatch & glob
[转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...
- Python模块学习filecmp文件比较
Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...
- python模块学习第 0000 题
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...
- Python模块学习:logging 日志记录
原文出处: DarkBull 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...
- 解惑Python模块学习,该如何着手操作...
Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...
- Python模块学习
6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...
- Python模块学习系列
python模块-time python模块-datetime python模块-OS模块详解
- Python模块学习遇到的问题
Python使用import导入模块时报ValueError: source code string cannot contain null bytes的解决方案 Python使用import导入模块 ...
随机推荐
- 父类属性值的copy
最近开发中遇到这样一个问题将父类的属性值copy到子类中,从而对子类添加一些其他属性. 父类: package com.jalja.org.jms.test01; import java.util.D ...
- [剑指Offer] 48.不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2.第二步:计算进 ...
- asp.net MVC 导出查询结果到Excel
首先在View视图中有一表单form,导出按钮<input class="btn export" type="button" value="导出 ...
- 【bzoj3427】Poi2013 Bytecomputer dp
题目描述 A sequence of N integers I1,I2…In from the set {-1,0,1} is given. The bytecomputer is a device ...
- Dom-直接 /间接选择器
Dom:Document Object Model的缩写, 把html转换成了文本对象. 1. 直接选择器 1.直接查找 document.getElementById 根据ID获取一个标签 docu ...
- Android <Android应用开发实战> 资源类型<二>
1.菜单资源菜单不仅可以在onCreateContextMenu或onCreateOptionsMenu方法中通过代码创建,还可以在res/menu目录中建立相应的菜单资源文件,并在上面两个方法中加载 ...
- 【CKplayer】使用CKplayer插件在网页中嵌入视频的方法
在做网站中有时候我们需要在网页中嵌入视频,一般视频嵌入有以下几种方法: 1. 优酷代码嵌入 优点:简单,方便,可靠. 缺点:有广告,现在的网站非常注重用户体验,如果打开一个在线视频是有长广告的一定会崩 ...
- BZOJ3781:小B的询问——题解
https://www.luogu.org/problemnew/show/2709 http://www.lydsy.com/JudgeOnline/problem.php?id=3781 题目描述 ...
- LibreOJ #6221. 幂数 !(数论+dfs+剪枝)
写新题然后艹翻标程的感觉真是舒爽啊... 这题就是个dfs...先预处理出sqrt(n)范围内的素数,然后dfs构造合法的数就行了. 直接暴搜会TLE,需要剪一剪枝,不需要跑到最后一层再计算答案,边构 ...
- SQL_MODE
一 声明 标红部分为重点了解 原文:https://segmentfault.com/a/1190000005936172 二 SQL_MODE参数值 官方手册专门有一节介绍 https://dev. ...