做一个战士不是一件简单的事。这是一场无休止的、会持续到我们生命最后一刻的斗争。没有人生下来就是战士,就像没人生下来就注定庸碌,是我们让自己变成这样或那样!
前言
optparse模块在2.7版本后将被弃用也不会得到更新,会使用argparse模块来替代。
① optparse 模块
import optparse
def main():
parser = optparse.OptionParser()
parser.usage = 'python3 optparse - argparse -h host -p port'
parser.add_option('-H',dest='tgthost',type='string',help='specify target host') # 注意这里使用 -H 来指明导入主机,因为 -h 是约定俗成的查看帮助作用,
parser.add_option('-p',dest='tgtport',type='int',help='specify target port')
(options,args) = parser.parse_args()
if options.tgthost == None or options.tgtport == None:
print(parser.usage)
exit(0)
else:
tgthost = options.tgthost
tgtport = options.tgtport
print('主机是:' + tgthost)
print('端口是:' + str(tgtport))
if __name__ == '__main__':
main()
结果
~$> python optparse模块使用.py -H zhutou.com -p 21 22
主机是:zhutou.com
端口是:21
不过以上的程序有个缺点,就是不能接收多个参数,比如不能接收多个主机或多个端口,于是使用 append()
方法来扩容。
修改之后的程序
import optparse
def main():
parser = optparse.OptionParser()
parser.usage = 'python3 optparse - argparse -h host -p port'
parser.add_option('-H',dest='tgthost',type='string',help='specify target host') # 注意这里使用 -H 来指明导入主机,因为 -h 是约定俗成的查看帮助作用,
parser.add_option('-p',dest='tgtport',type='int',help='specify target port')
(options,args) = parser.parse_args()
tgthost = options.tgthost
tgtport = options.tgtport
args.append(tgtport)
if tgthost == None or tgtport == None:
print(parser.usage)
exit(0)
else:
print('主机是:' + tgthost)
print('端口是:' ,end='')
for port in args:
print(str(port) + ' ',end='')
if __name__ == '__main__':
main()
结果
~$> python optparse模块使用.py -H zhutou.com -p 22 21 25 443 445 3306
主机是:zhutou.com
端口是:21 25 443 445 3306 22
② argparse 模块
argparse 模块使得创建一个用户友好的命令行接口更加容易,程序定义了它需要的参数,同时 argparse 模块将知道如何解析 sys.argv
之外的参数。argparse 模块还会自动地生成 help
和 usage
信息,并在用户输入不合理的参数之后会发出错误。
PS: 关于 argparse 模块的详细信息可以参考 Python文档
以下内容参考
1. 基本框架
import argparse
def main():
parse = argparse.ArgumentParser(description='demo of argparse')
parse.add_argument('-n','--name',dest='name',help='special name is need')
parse.add_argument('-y','--year',dest='year',help='special year is need')
args = parse.parse_args()
if args.name == None or args.year == None:
print(parse.usage)
exit(0)
else:
name = args.name
year = args.year
print('Hello {} {}'.format(name,year))
if __name__ == '__main__':
main()
结果
~$> python .\argparse模块使用.py -h
usage: argparse模块使用.py [-h] [-n NAME] [-y YEAR]
demo of argparse
optional arguments:
-h, --help show this help message and exit
-n NAME, --name NAME special name is need
-y YEAR, --year YEAR special year is need
~$> python .\argparse模块使用.py -n lin -y 2020
Hello lin 2020
2. default
default 表示命令行没有设置该参数的时候,程序默认使用 default 指定的值代替。
parser.add_argument('-n',default='zhutou')
3. required
如果设置了 required=True
,则在实际运行的时候不设置该参数将报错。
parser.add_argument('-n',required=True)
4. type
默认的参数类型是 str
类型,可以设置成整型/布尔型:type=int
或 type=bool
parser.add_argument('-n',type=int)
parser.add_argument('-n',type=bool)
5. choices
参数值只能从几个选项里面选择
parser.add_argument('-n',choices=['zhutou1','zhutou2','zhutou3'])
6. help
指定参数说明的信息
7. dest
设置参数在代码中的变量名,如果通过 dest=xxx 设置了参数的变量名,那么在代码中使用 args.xxx 来获取参数值。
8. nargs
设置了参数可以接收多少个参数
parser.add_argument('-n',nargs=x)
值 | 含义 |
---|---|
N | 参数的绝对个数(例如:3) |
‘?’ | 0或1个参数 |
‘*’ | 0或所有参数 |
‘+’ | 所有,并且至少一个参数 |
猪头
2020.4.8