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的更多相关文章

  1. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

  2. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  3. Python标准库14 数据库 (sqlite3)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  4. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  5. Python标准库:内置函数hasattr(object, name)

    Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...

  6. python标准库xml.etree.ElementTree的bug

    使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...

  7. 【python】Python标准库defaultdict模块

    来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...

  8. Python标准库

    Python标准库是随Python附带安装的,它包含大量极其有用的模块.熟悉Python标准库是十分重要的,因为如果你熟悉这些库中的模块,那么你的大多数问题都可以简单快捷地使用它们来解决. sys模块 ...

  9. Python标准库07 信号 (signal包,部分os包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习 ...

随机推荐

  1. Ambari集成Kerberos报错汇总

    Ambari集成Kerberos报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看报错的配置信息步骤 1>.点击Test Kerberos Client,查看相 ...

  2. SVN简单的使用

    一.什么是SVN有什么用? SVN是Subversion的简称,是一个开放源代码的版本控制系统.主要是用于团队开发中的资源共享和团队协作. 二.SVN服务器的安装 1.下载安装文件 在下面地址下载Vi ...

  3. JAVA-Clone 对象拷贝

    JAVA 中对象的赋值是复制对象的引用,即复制引用 public static void main(String[] args) { User user = new User(1,"asds ...

  4. cmd命令查看当前IIS运行的网站iisapp appcmd

    xp,2003中用的命令是:iisapp -a 2007,2008,2012系统中: cmd命令行进入%windir%\system32\inetsrv\目录下 运行appcmd.exe list w ...

  5. springBoot打包发布项目------jar包

    这两年微服务很流行,这里简单介绍一下如何将自己使用idea写的微服务打包成一个可执行的jar包,并发布到linux服务器的步骤.因为spring boot有内置的tomcat所以一般使用内置的tomc ...

  6. ext.net gridlist选择内部元素时自动选择所在行

    function changeSelection(id) { var index = 0; for (var i = 0; i < mcp_liststore.data.length; i++) ...

  7. 使用 JS 实现文字上下跑马灯

    Ø  前言 今天在做商城首页时,遇到一个上下跑马灯功能,因为之前也只是接触过左右的跑马灯,一时还不知道从何下手.在网上看了几个 demo,并亲自运行了一下,是可以实现的.但是,能运行不知其所以然也不行 ...

  8. linux上安装mysql,tomcat,jdk

    Linux 上安装 1 安装jdk 检测是否安装了jdk 运行 java –version 若有 需要将其卸载 a)         查看安装哪些jdk rmp –qa |grep java b)   ...

  9. 三十、Linux 进程与信号——信号的概念及 signal 函数

    30.1 信号的基本概念 信号(signal)机制是Linux 系统中最为古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化 信号是软件中断 信号是异步事件 ...

  10. Learn jQuery in y seconds

    [兼容IE8以下没办法][虽不是Modern Web(不建议直接操作DOM)但也是一大利器] 个人推荐书[CSS 网站实录][JavaScript Dom 编程艺术][刚开始学不能太纠结机制机理原理因 ...