optparse模块解析命令行参数的说明及优化

  1、关于解析命令行参数的方法html

  关于“解析命令行参数”的方法咱们通常都会用到sys.argv跟optparse模块。关于sys.argv,网上有一篇很是优秀的博客已经介绍的很详细了,你们能够去这里参考:https://www.cnblogs.com/aland-1415/p/6613449.html python

  这里为你们介绍一个比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获取参数的话须要作不少麻烦的逻辑判断,这给咱们开发程序带来了很大的不便。spa

  可是若是咱们利用optparse会十分便捷的解决这样的问题。命令行

  2、optparse介绍code

  2.1 optparse的用法以下:server

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()来解析命令行。htm

  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、重点说明

  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()

  效果以下:

相关文章
相关标签/搜索