Python标准模块--argparse
1 模块简介
你一定很奇怪Python是如何命令行中的变量的吧?argparse就是用来解决这个问题的,argparse是optparse的替代。
2 模块使用
2.1 开始
我发现解释一个编程的概念,最简单的方式就是用一段代码来展示。下面就是一段超级简单的代码,
import argparse
parser = argparse.ArgumentParser(
description = "A simple argument parser",
epilog = "This is where you might put example usage"
)
parser.print_help()
控制台输出,
usage: main.py [-h]
A simple argument parser
optional arguments:
-h, --help show this help message and exit
This is where you might put example usage
这里,我们仅仅是引入argparse,然后设置了描述和使用部分。这里主要是当你向你所创建的程序寻求帮助时,它将会告诉你如何使用它。在这个例子中,它打印出简单的描述,默认的选项("-h")和使用示例。
我们让这个例子更加的具体,你一般是通过命令行传递参数,因此将代码移到Python文件中的一个函数。
import argparse
def get_args():
parser = argparse.ArgumentParser(
description = "A simple argument parser",
epilog = "This is where you might put example usage"
)
return parser.print_help()
if __name__ == "__main__":
get_args()
在命令行中运行脚本,
python main.py -h
将会显示出我们之前看到的文本信息,现在,我们开始学习如何添加我们需要的变量吧。
2.2 添加变量
下面一段代码是添加三个新的我们的parser可以理解的变量。我们添加一个必须要求的变量,另外两个不是必须要求的,我们也可以添加一个默认和一个必须要求的类型。
import argparse
def get_args():
parser = argparse.ArgumentParser(
description = "A simple argument parser",
epilog = "This is where you might put example usage"
)
# required argument
parser.add_argument('-x',action = "store",required = True,help = "Help text for option X")
# optional argument
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()
控制台输出,
zhb@zhb-VM:~/workspace/PythonTest$ python main.py
usage: main.py [-h] -x X [-y Y] [-z Z]
main.py: error: argument -x is required
zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something
Namespace(x='something', y=False, z=None)
zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -y text
Namespace(x='something', y='text', z=None)
zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -z text
usage: main.py [-h] -x X [-y Y] [-z Z]
main.py: error: argument -z: invalid int value: 'text'
zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -z 10
Namespace(x='something', y=False, z=10)
正如你所看到的,如果你不传入任何变量,而直接运行代码,你将会出错。然后,我们仅仅传入要求的变量,你可以看到对于其它两个变量直接使用默认值。再然后,我们试图将"text"传给"-y"变量并将它存储下来,所以,我们直到它并不要求是布尔类型。最后两个例子显示当你传入一个无效和有效的值给"-z"时的结果。
到此,变量名字不需要只有一个字符,你可以修改它,让它的描述性更强,例如"arg1"或者"simulator"或者任何你想要的。
2.3 短选项和长选项
下面我们将会学习如何使用短选项和长选项,我们实际上已经使用了短选项,
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")
你将会注意到长选项不止一个字符,并且它必须要以两个破折号开始,而不是一个。
2.4 选项冲突
如果两个选项相互冲突,你该如何解决?一个常见的例子就是在调试模式还是在静音模式下,运行你的应用?你可以在任意一种模式下运行,但是不能同时在两种模式下运行。我们如何防止用户以这种方式运行呢?一种简单的方式就是通过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群组,让我们尝试着在命令行中输入如下命令,
zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x 10 -y 2
当我们执行这条命令,控制台输出,
usage: main.py [-h] [-x EXECUTE | -y Y] [-z Z]
main.py: error: argument -y: not allowed with argument -x/--execute
很明显,它并没有执行成功,并且argparse模块告诉我们什么原因。
2.5 总结
你现在了解了如何创建一个基本的变量解析器。这个模块还有许多其它你可能感兴趣的用法,例如定义一个交替的目标名称用于保存,使用不同的前缀,创建变量群组等等。我推荐你去阅读官方文档。
3 Reference
Python标准模块--argparse的更多相关文章
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- Python标准模块--importlib
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python提供了importlib包作为标准库的一 ...
- Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures
参考博客: https://www.cnblogs.com/xiao987334176/p/9046028.html 线程简述 什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线 ...
- python 全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)
昨日内容回顾 线程什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的 一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的在当 ...
- 【转】Python标准模块--importlib
[转]Python标准模块--importlib 作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 P ...
- Python标准模块--logging(转载)
转载地址:http://www.cnblogs.com/zhbzz2007/p/5943685.html#undefined Python标准模块--logging 1 logging模块简介 log ...
- python全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)
昨日内容回顾 线程 什么是线程? 线程是cpu调度的最小单位 进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的 ...
- python标准模块(二)
本文会涉及到的模块: json.pickle urllib.Requests xml.etree configparser shutil.zipfile.tarfile 1. json & p ...
随机推荐
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- C语言 · 数位分离
问题描述 编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示. 输入格式:输入只有一行,即一个1000以内的正整数. 输出格式:输出只有一行,即该整数的每 ...
- Linux中进行单文件内容的复制
文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...
- Partition2:对表分区
在SQL Server中,普通表可以转化为分区表,而分区表不能转化为普通表,普通表转化成分区表的过程是不可逆的,将普通表转化为分区表的方法是: 在分区架构(Partition Scheme)上创建聚集 ...
- 带你实现开发者头条APP(四)---首页优化(加入design包)
title: 带你实现开发者头条APP(四)---首页优化(加入design包) tags: design,Toolbar,TabLayout,RecyclerView grammar_cjkRuby ...
- MVC CodeFirst简单的创建数据库(非常详细的步骤)
最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...
- 【uwp】浅谈China Daily 中划词翻译的实现
学习uwp开发也有一段时间了,最近上架了一个小应用(China Daily),现在准备将开发中所学到的一些东西拿出来跟大家分享交流一下. 先给出应用的下载链接:China Daily , 感兴趣的童鞋 ...
- DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码
前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里. 最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓 ...
- github中的watch、star、fork的作用
[转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...