getopt 模块用法
因为需要通过外部传参来执行 python 代码,查阅资料,了解到 python 自带的 getopt 模块能够实现我的需求。此篇文章主要记录 getopt 模块的相关用法。
getopt 简述
getopt 模块专门用来处理命令行参数。具体用法我们通过代码实例进行验证。
如果你想直接一步到位,不想阅读我后面的文章,你也可以输入以下代码查看相关帮助信息。
import getopt
print(getopt.__doc__)
getopt 模块详解
这个模块有两个函数,两个属性。
函数:
getopt.getopt()
getopt.gnu_getopt()
属性:
getopt.error
getopt.GetoptError
两个属性主要用来抛出错误信息。我们一般常用的是 getopt 函数,文章后面主要介绍 getopt 函数的具体用法。
getopt 函数的参数
getopt.getopt(args,shortopts,longopts=[])
args 指的是当前脚本接收的参数,是一个列表。可以由 sys.argv 获取,sys.argv[0]表示当前脚本名。
shortopts 是短参数,类似 python3 test.py -h
longopts 是参数,类似 python3 test.py –help
getopt 函数返回值
我们将下面的代码写到 test.py 文件中。sys.argv[0]代表的是当前脚本的文件名,所以应该写 sys.argv[1:]
import sys,getopt
args=getopt.getopt(sys.argv[1:],"-h",["help"])
print(args)
执行代码
python3 test.py -h helpinfo
查看代码执行结果可知 getopt 函数返回的一个二元组的列表。
代码实例
以下代码是从我的一个工具开发项目中截取的部分。python 文件名为 Parserpkt.py。
import sys,getopt
#命令行帮助信息
def usage():
Usage = """
Usage:
Options:
[--args args] \t\t-- 需要查询或者获取的参数\n \
[-f filename.cap] \t\t-- 获取数据包的目录,默认/tmp/packe/snmp.cap \
[-o parser_filename] \t-- 解析数据包生成的文件,默认/tmp/packet/result.txt\n \
[-v ] \t\t-- 工具程序的版本 \n\
[-h | --help] \t\t-- 显示帮助信息\n\
eg:
--args ip.src=192.168.1.1,ip.dst=224.0.0.2,igmp.type
表示查询源地址为 1.1,目的 IP 地址 0.22 的组播 type 值
"""
print(Usage)
#处理参数
opts,args=getopt.getopt(sys.argv[1:],'f:o:vh',["help","args="])
# print('opts:',opts)
# print('args:',args)
for op,value in opts:
if op == '-f':
packetfile=value
elif op == '-o':
parserfile=value:
elif op == '-v':
print('version:1.0.0')
elif op == '--args':
allargs=value
kargs={}
largs=[]
for subargs in allargs.split(','):
if "=" in subargs:
kargs[subargs.split('=')[0]]=subargs.split('=')[1]
else:
largs.append(subargs)
elif op in ('-h','--help'):
usage()
sys.exit()
打印工具版本和帮助信息
python3 Parserpkt.py -v -h
传入带值的参数,执行代码
python3 Parserpkt.py -f test.pcap --args ip.src=192.168.1.1,ip.dst
短参数名定义了 ‘f:o:vh’ , f 和 o 后面均有”:”,这个:代表了当前参数是有值的。v 和 h 后面没有:,所以在参数调用的时候就不需要传值。
长参数名定义了 help 和 args。args 需要接收参数值,所以必须在参数后面加上”=”。help 在参数调用的时候就不需要传值。
需要传值的参数调用
短参数调用:-参数名[空格]参数值
长参数调用:–参数名=参数值
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: python + selenium 技术
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论