解析命令行参数有两种方法,分别为sys.argv模块和optparse模块。
一、命令行参数sys.argv
sys模块的sys.argv中,sys.argv[0]为脚本名称,sys.argv[1]为第一个参数,代码示例:
import sys print(len(sys.argv)) for arg in sys.argv: print(arg) 执行这段代码的过程: $ python3 argtest.py hello world 3 argtest.py hello world
循环打印每一个参数,第一个为sys.argv[0]就是运行的程序文件,从sys.argv[1]开始才是程序的参数。
二、命令行参数optparse
比sys.argv更强大的optparse模块。
当我们要利用server与client进行FTP文件传输的时候,在client端往往需要输入诸如 -s 10.10.10.1 -p 9001这样的信息,当然我们不能控制用户的输入,如果用户随意的输入错误的命令,比如不写IP地址,只是写-s -p 9001,或者只写 -s -p。我们如果还用sys.argv获取参数的话需要做很多麻烦的逻辑判断,这给我们开发程序带来了很大的不便。
但是如果我们利用optparse会十分便捷的解决这样的问题。
optparse的用法如下:
首先import optparse类,然后创建optparse对象parser,再使用add_option()来定义命令行参数,最后使用parse_args()来解析命令行。
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 usage = "usage: %prog [options] arg1 arg2" parser = optparse.OptionParser(usage=usage) parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=True, help="make lots of noise [default]") parser.add_option("-q", "--quiet", action="store_false", dest="verbose",help="be vewwy quiet (I'm hunting wabbits)") parser.add_option("-f", "--filename", metavar="FILE", help="write output to FILE"), parser.add_option("-m", "--mode",default="intermediate", help="interaction mode: novice, intermediate, " "or expert [default: %default]") usage = "usage: %prog [options] arg1 arg2" #这行信息会优先打印在程序的选项信息前。当中的 %prog,optparse 会以当前程序名的字符串来替代:如 os.path.basename.(sys.argv[0])。 #如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”。
例子1:
我们新建一个test.py文件,代码如下
import optparse class My_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__': my_opt = My_opt()
self.options类型是<class 'optparse.Values'>,形式上类似一个字典,保存用户输入的正确的参数信息
例如用户执行脚本文件test.py -s 1.1.1.1 -P 9001 -u admin -p 123,
则self.options={'server':'1.1.1.1','port':'9001','username':'admin','password':'123'}
可以通过.方法获取里面的值,例如
server = my_opt.server
port = my_opt.port
self.args是一个列表,保存的是用户输入的其他错误参数
例如用户执行脚本文件test.py -s A 1.1.1.1 -P 9001 -u admin -p 123 B,则self.args=['A','B']
例子2:
打印用户输入的内容
test.py # -*- coding: utf-8 -*- import optparse parser = optparse.OptionParser('usage %prog –t <打印内容>') parser.add_option('-t', dest='text', type='string', help='输入要打印的内容') options, args = parser.parse_args() text = options.text print(text)
运行脚本:
test.py -t 打印内容
如果想要看打印帮助信息,可以加参数-h
E: est>python test.py -h Usage: usage test.py –t <打印内容> Options: -h, --help show this help message and exit -t TEXT 输入要打印的内容