argparse的使用

argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt,Click。

ipython下使用argparse

首先安装ipython

pip3 install ipython

执行下面命令

import argparse

parse=argparse.ArgumentParser(

description="A simple argument parser",

epilog="This is where you might put example usage"

)

parse.print_help()

输出

usage: ipykernel_launcher.py [-h]

A simple argument parser

optional arguments:

-h, --help show this help message and exit

This is where you might put example usage

上面的代码很简单,

方法ArgumentParser具体参数如下

ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)

这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法时,会打印这些描述信息,一般只需要传递description参数。

上面的代码是在命令行中运行,下面我们把代码写在py文件,并通过命令行调用。

通过命令行传参调用py文件

首先我们创建一个py文件代码如下

#1.py

import argparse

def get_args():

parser=argparse.ArgumentParser(

description="A Simple argument parser",

epilog="This is where you might put usage"

)

return parse.parse_args()

if __name__=="__main__":

get_args()

然后在命令执行如下命令

python3 1.py -h

输出和第一个例子类似的内容

usage: 1.py [-h]

A Simple argument parser

optional arguments:

-h, --help show this help message and exit

This is where you might put usage

下面让我加一些自定义的参数

添加自定义参数

首先我们先来看一段代码

#2.py

import argparse

def get_args():

parser=argparse.ArgumentParser(

description="A simple argument parser",

epilog="This is where you might put example usage")

# 使用required参数设置为必须的参数

parser.add_argument('-x', action="store", required=True,help='Help text for option X')

# 可选参数

parser.add_argument('-y', help='Help text for option Y', default=False)

parser.add_argument('-z', help='Help text for option Z',type=int)

print(parser.parse_args())

if __name__=='__main__':

get_args()

我们使用add_argument添加需要参数,第一个值是命令行输入的参数,设置required参数的值可以设定是否为必须参数,显示help帮助内容,type声明输入参数的类型。

调用parse_args方法可以解析添加的参数。

命令行输入下面内容

python3 2.py

输出

usage: 2.py [-h] -x X [-y Y] [-z Z]

2.py: error: the following arguments are required: -x

可以看出,调用的文件文2.py,有 x y z三个参数,其中第二行出错了,原因是x是必须参数而这里我没有赋值。

如是我修改成以下内容

python3 2.py -x hehe -y "233" -z "233"

可以看到结果如下

Namespace(x='hehe', y='233', z=233)

因为我声明了z为int所以这里我即使属于字符串程序里也会给转成int类型。

短选项和长选项

下面我们将会学习如何使用短选项和长选项,我们实际上已经使用了短选项,

parser.add_argument('-x',action = "store",required = True,help = "Help text for option X")

如果我们想使用长选项,我们仅仅需要在短选项的右边添加长选项,如下所示,

parser.add_argument('-x','--execute', action = "store",required = True,help = "Help text for option X")

你将会注意到长选项不止一个字符,并且它必须要以两个破折号开始,而不是一个。

选项冲突

如果两个选项相互冲突,你该如何解决?一个常见的例子就是在调试模式还是在静音模式下,运行你的应用?你可以在任意一种模式下运行,但是不能同时在两种模式下运行。我们如何防止用户以这种方式运行呢?一种简单的方式就是通过mutually_exclusie_group函数,假设选项x和选项y不能同时运行。

import argparse

def get_args():

parser = argparse.ArgumentParser(

description = "A simple argument parser",

epilog = "This is where you might put example usage"

)

group = parser.add_mutually_exclusive_group()

group.add_argument('-x','--execute', action = "store",help = "Help text for option X")

group.add_argument('-y',help = "Help text for option Y",default = False)

parser.add_argument('-z',help = "Help text for option Z",type = int)

print(parser.parse_args())

if __name__ == "__main__":

get_args()

你将会注意到我们创建了一个手动排它的群组,我们将需要手动排它的选项添加到群组,剩下的选项继续添加到常规的parser群组,让我们尝试着在命令行中输入如下命令,

python3 2.py -x 10 -y 2

当我们执行这条命令,控制台输出,

usage: 2.py [-h] [-x EXECUTE | -y Y] [-z Z]

2.py: error: argument -y: not allowed with argument -x/--execute

很明显,它并没有执行成功,并且argparse模块告诉我们什么原因。

参考资料:

python201

python argparse库_python标准库之argparse相关推荐

  1. python的标识库和第三方库_Python 标准库、第三方库

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写.网络抓取和解析.数据连接.数清 ...

  2. python字符串库函数_Python标准库概览(1):string

    Python的 string 标准库保留了一些有用的函数和用于处理文本对象的类,现在我们来一起看一下Python的string标准库还有哪些我们不知道的有趣用法? 01.capwords()函数:将字 ...

  3. python的threading库_python标准库介绍——31 threading 模块详解

    threading 模块 (可选) ``threading`` 模块为线程提供了一个高级接口, 如 [Example 3-1 #eg-3-1] 所示. 它源自 Java 的线程实现. 和低级的 ``t ...

  4. python自带sqlite库_Python标准库之sqlite3使用实例

    Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具.SQLite还在其它领域有广泛的应 ...

  5. python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)

    Python标准库04 文件管理 (部分os包,shutil包) 在操作系统下,用户可以通过操作系统的命令来管理文件,参考.Python 标准库则允许我们从 Python 内部管理文件.相同的目的,我 ...

  6. python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理

    python标准库+内置函数+第三方库 欲善其事,必先利其器 这其器必是python的标准库+内置函数,话说许多第三方库, 也是对标准库的使用,进行封装,使得使用起来更方便. 这些库以使用场景来分类: ...

  7. python groupby用法_Python 标准库实践之合并字典组成的列表

    作者 | 陈祥安 来源 | Python学习开发 最近做了个数据合并的需求这里记录下: 要求如下: dict_of_list1 = [{"name": "zhangsan ...

  8. print python 带回车_python标准库threading源码解读【二】

    紧接着上一篇文章继续解析源码 甘蔗:python标准库threading源码解读[一]​zhuanlan.zhihu.com 目录 Event的介绍和用法 Event源码解析 以后的内容尽量少一点并且 ...

  9. python lib库_python标准库pathlib常见操作

    pathlib-- 面向对象的文件系统路径 它是python3.4新增的一个标准库,提供了不同操作系统下文件系统路径的操作方式,有两大类一个是纯路径不带I/0操作,另一个可以进行I/0的类.pathl ...

最新文章

  1. 同时查找数组中最大和最小值
  2. p话少说,放码过来?
  3. c语言中switch的用法是什么?
  4. 案例三:执行 JavaScript 语句
  5. Codeforces.700E.Cool Slogans(后缀自动机 线段树合并 DP)
  6. 深入分析之Cluster层
  7. python 策略回测_python策略怎么进行全市场回测-金字塔知识 -程序化交易(CXH99.COM)...
  8. 一个简单的nginx配置
  9. 搜索引擎Autonomy
  10. 串口公头母头: RS232 DB9 公头 母头 串口引脚定义
  11. CS5213芯片|HDMI to VGA转换头芯片
  12. nginx反向代理是什么?
  13. flutter图片聊天泡泡_Flutter 非常丰富的消息气泡效果合集
  14. 计算机通信原理基础知识总结
  15. IE浏览器低版本判断及升级提示
  16. 如何扩展VMware xp虚拟机磁盘
  17. 学校计算机教室报损登记本,平阴县中小学功能室管理基本要求
  18. 入职数字ic设计后的一些工作心得
  19. 分子模拟-学习笔记(二)
  20. 《网络安全工程师笔记》 第十四章:渗透简单测试流程

热门文章

  1. 智领新时代 慧享新生活 —— CITE2018新闻发布会在北京召开
  2. 二叉树的非递归遍历(递归和非递归)
  3. 位运算和典型应用详解
  4. 在ie7中overflow: hidden失效问题哦及解决方案
  5. vue.js仿饿了么app---webpack配置项
  6. 屌丝giser成长记-大学篇
  7. C 文件操作库函数总结
  8. 编译器中代码自动对齐快捷键
  9. 用例子说明MVC 设计模式(以Objective-C 实现)
  10. 特质波动率python