getopt 模块用法

发布于 2024-04-04 04:08:43 字数 2776 浏览 11 评论 0

因为需要通过外部传参来执行 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

椵侞

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文