optparse模块解析命令行参数的说明及优化
一、关于解析命令行参数的方法
关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块。关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考:https://www.cnblogs.com/aland-1415/p/6613449.html
这里为大家介绍一个比sys.argv更强大的optparse模块。
这里说一句题外话,点开optparse的源码,第一行注释是这样的:A powerful, extensible, and easy-to-use option parser。是否感受到了作者强有力的......
说回正题。当我们要利用server与client进行FTP文件传输的时候,在client端往往需要输入诸如 -s 10.10.10.1 -p 9001 这样的信息,当然我们不能控制用户的输入,如果用户随意的输入错误的命令,比如不写IP地址,只是写-s -p 9001,或者只写 -s -p。我们如果还用sys.argv获取参数的话需要做很多麻烦的逻辑判断,这给我们开发程序带来了很大的不便。
但是如果我们利用optparse会十分便捷的解决这样的问题。
二、optparse介绍
2.1 optparse的用法如下:
import optparse
parser = optparse.OptionParser()
parser.add_option("-s", "--server", dest="server", help="ftp server ip_address")
parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port")
parser.add_option("-u", "--username", dest="username", help="username info")
parser.add_option("-p", "--password", dest="password", help="password info")
首先import optparse类,然后创建optparse对象parser,再使用add_option()来定义命令行参数,最后使用parse_args()来解析命令行。
2.2 举例说明:
我们先新建一个test.py文件,代码如下
import optparse
class Wang_opt:
def __init__(self):
#初始化
parser = optparse.OptionParser()
parser.add_option("-s", "--server", dest="server", help="ftp server ip_address")
parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port")
parser.add_option("-u", "--username", dest="username", help="username info")
parser.add_option("-p", "--password", dest="password", help="password info")
#解析参数
self.options, self.args = parser.parse_args()
print(self.options,self.args)
if __name__ == '__main__':
whw_opt = Wang_opt()
然后在test.py文件的目录下运行python test.py,后面不跟任何参数,看看效果:

运行的结果一个是”字典”,里面存放的是我们需要的信息,后面有一个“空列表”,我们再试试加上符合条件的参数以及不符合条件的参数:

这就说明,”字典”中存放的是我们需要的信息,如果用户没有输入默认设置为None;而“列表”’中存放的是“错误”信息。再返回头看看源代码,其实这个”字典”就是上面的self.options变量,“列表”就是self.args。optparse模块解析的结果就是“我们想得到的信息”以及“用户误操作的输入信息”——的确很强大!
当然,如果用户不知道他需要输入什么命令,我们可以在后面输入 -h,寻求帮助:

其实大家可以对照着源代码,这些信息的关键字都是我们在add_option()方法中设置的——嗯,确实~A powerful, extensible, and easy-to-use option parser
三、重点说明
3.1 关于得到的“字典”与“列表”的说明:
其实我们解析得到的参数self.options与 self.args并不是真正意义上的字典与列表,只是“字典与列表的形象”而已!实际上,这两个参数是“对象”,我们可以进行如下验证:在程序最后打印:
print(whw_opt.options.server)

我们可以看到:用操作符‘.’可以取得server的值 0.0.0.0。
但是,我们如果利用字典的key-value的取值方式会报错:

3.2 一个小优化:
当然,再厉害的工具也必然会有缺点。如果要求用户必须有输入的话,我们可以这样来优化一下程序:
import optparse
class Wang_opt:
def __init__(self):
#初始化
parser = optparse.OptionParser()
parser.add_option("-s", "--server", dest="server", help="ftp server ip_address")
parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port")
parser.add_option("-u", "--username", dest="username", help="username info")
parser.add_option("-p", "--password", dest="password", help="password info")
#解析参数
self.options, self.args = parser.parse_args()
print(self.options,self.args)
def verification(self):
if not self.options.server or not self.options.port:
exit('ERROR!must support server and port parameters!')
if __name__ == '__main__':
whw_opt = Wang_opt()
whw_opt.verification()
效果如下:

optparse模块解析命令行参数的说明及优化的更多相关文章
- python解析命令行参数
常常需要解析命令行参数,经常忘记,好烦,总结下来吧. 1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表 参数个数:len(sys.a ...
- boost之program_options库,解析命令行参数、读取配置文件
一.命令行解析 tprogram_options解析命令行参数示例代码: #include <iostream> using namespace std; #include <boo ...
- linux 中解析命令行参数(getopt_long用法)
linux 中解析命令行参数(getopt_long用法) http://www.educity.cn/linux/518242.html 详细解析命令行的getopt_long()函数 http:/ ...
- C语言中使用库函数解析命令行参数
在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...
- Windows下解析命令行参数
linux通常使用GNU C提供的函数getopt.getopt_long.getopt_long_only函数来解析命令行参数. 移植到Windows下 getopt.h #ifndef _GETO ...
- Python技法:用argparse模块解析命令行选项
1. 用argparse模块解析命令行选项 我们在上一篇博客<Linux:可执行程序的Shell传参格式规范>中介绍了Linux系统Shell命令行下可执行程序应该遵守的传参规范(包括了各 ...
- 3.QT中QCommandLineParser和QCommandLineOption解析命令行参数
1 新建项目 main.cpp #include <QCoreApplication> #include <QCommandLineParser> #include & ...
- 使用 Apache Commons CLI 解析命令行参数示例
很好的输入参数解析方法 ,转载记录下 转载在: https://www.cnblogs.com/onmyway20xx/p/7346709.html Apache Commons CLI 简介 Apa ...
- Shell 参数(2) --解析命令行参数工具:getopts/getopt
getopt 与 getopts 都是 Bash 中用来获取与分析命令行参数的工具,常用在 Shell 脚本中被用来分析脚本参数. 两者的比较 (1)getopts 是 Shell 内建命令,geto ...
随机推荐
- python str使用笔记(更新)
判断字符串是否以某个串为结尾: str.endswith(strtmp) 返回True/False >>> strs='aba' >>> strs.endswith ...
- eclipse svn不能忽略文件及文件夹,ignore设置无效 ?
https://blog.csdn.net/zengmingen/article/details/79025445 https://blog.csdn.net/zengmingen/article/d ...
- maven项目eclipse目录结构浅析
maven项目eclipse目录结构浅析 PS:Java Resources是为了方便我们编译,到最后都会编译到 WEB-INF/classes Maven项目的目录结构
- react-redux 的使用
1 安装react-redux: npm install --save react-redux 2.之前使用redux的store.subscribe监听 store的状态改变,通过store.get ...
- C++中的ravalue学习笔记
一.学习笔记 1. A a = 42; 会先以42为参数构造一个A类对象,然后调用拷贝构造函数来构造a,目前编译器优化掉了拷贝构造函数的调用,测试拷贝构造函数是没有被调用的,但是其权限不能为priva ...
- openresty redis all in one docker demo
一个简单的docker demo 集成openresty+ redis,可以实现基于redis的动态修改反向代理的处理 环境准备 docker-compose 文件 version: " ...
- 01 Linux简介
1.Linux简介 UNIX与Linux发展史 Unix在1969年,美国贝尔实验室的肯汤普森在DEC PDP-7机器上开发出了UNIX系统. Linux出现于1991年,是由芬兰赫尔辛基大学学生李纳 ...
- 05机器学习实战之Logistic 回归
Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...
- 高维数据的高速近期邻算法FLANN
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jinxueliu31/article/details/37768995 高维数据的高速近期邻算法FL ...
- Tensorflow 笔记
TensorFlow笔记-08-过拟合,正则化,matplotlib 区分红蓝点 TensorFlow笔记-07-神经网络优化-学习率,滑动平均 TensorFlow笔记-06-神经网络优化-损失函数 ...