解析命令行参数有两种方法,分别为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:\test>python test.py -h
Usage: usage test.py –t <打印内容>

Options:
-h, --help show this help message and exit
-t TEXT 输入要打印的内容

 

posted on 2020-07-02 18:03  longfei2021  阅读(298)  评论(0编辑  收藏  举报