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='+'即可。
Python Argparse模块的更多相关文章
- Python argparse 模块
Python argparse 模块 test.py: import argparse argparser = argparse.ArgumentParser(add_help=False) argp ...
- python - argparse 模块学习
python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...
- python argparse模块解析命令行选项简单使用
argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...
- python argparse模块:命令行选项及参数解析
位置参数:给一个例子: import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") ...
- Python argparse模块实现模拟 linux 的ls命令
python 模拟linux的 ls 命令 sample: python custom_ls.py -alh c:/ 选项: -a ,--all 显示所有文件,包括'.'开头的隐藏文件 -l 列表显 ...
- python argparse模块--转载
add_argument:读入命令行参数,该调用有多个参数 ArgumentParser.add_argument(name or flags…[, action][, nargs][, const] ...
- python argparse模块的使用
import argparse def get_parse(): # 初始化 parse = argparse.ArgumentParser() # 添加选项,类型为str,默认为空 parse.ad ...
- Python标准模块--argparse
1 模块简介 你一定很奇怪Python是如何命令行中的变量的吧?argparse就是用来解决这个问题的,argparse是optparse的替代. 2 模块使用 2.1 开始 我发现解释一个编程的概念 ...
- Python解析命令行读取参数 -- argparse模块
在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...
随机推荐
- 朱晔的互联网架构实践心得S1E1:Pilot
朱晔的互联网架构实践心得S1E1:Pilot 最近几年写博客确实写得少了,初出茅庐的时候什么都愿意去写,现在写一点东西之前会反复斟酌是否有价值.工作十几年了,做了N多个互联网系统,业务涉及教育.游戏. ...
- 05 Docker集群/基础设施 - DevOps之路
05 Docker集群/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker的集群目前主流的 ...
- 循环 while
day 2 ---------------------------------------------------把一件简单的事情做到极致,你就成功了. Day2作业及默写 1.判断下列逻辑语句的Tr ...
- 便于记忆的SA构造
首先学习基数排序. memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) b[a[i]]++; for(int i = 1; i <= m ...
- SpringCloud微服务架构分布式组件如何共享session对象
一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...
- Python之拆分目录
成分目录的好习惯,使得代码保持整洁,为以后的代码管理提供方便. 一.概念 一般目录有以下几个: bin:程序入口,存放start文件. conf:存放固定的配置信息,比如:连接redis的配置信息.连 ...
- Tomcat集成Memcached Session Manager方案
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.2/memcached-session-ma ...
- IdentityServer4【QuickStart】之使用ClientCredentials流程保护API
使用ClientCredentials流程保护API 这个示例展示了使用IdentityServer中保护APIs的最基本的场景. 在这个场景中我们会定义一个API和一个想要访问它的客户端.客户端会在 ...
- ES6学习之let
块级作用域 ; i < ; i++){} console.log(i); ; j < ; j++){} console.log(j); //"ReferenceError: j ...
- java核心API学习
1:java.lang (Object.String.StringBuffer.Thread.System.ClassLoader.Class.Runtime.包装类等)