Python中snicaddr与snicstats是什么?相关psutil类型定义查询
关于psutil中snicaddr和snicstats类型的说明
psutil里的snicaddr和snicstats都是内部定义的命名元组(namedtuple),不会在公开API文档里单独列出类型定义,但可以通过实例属性或源码明确它们的结构:
snicaddr 类型
psutil.net_if_addrs()返回的字典中,每个网卡对应的列表元素都是snicaddr对象,包含以下属性:
family:地址族(对应socket模块中的地址族常量,比如socket.AF_INET代表IPv4,socket.AF_INET6代表IPv6,socket.AF_PACKET代表链路层地址)address:网卡的IP地址或链路层地址(如MAC地址)netmask:子网掩码(仅IPv4/IPv6地址会有该值)broadcast:广播地址(仅IPv4地址会有该值)ptp:点对点地址(仅IPv6或PPP链接会有该值)
snicstats 类型
psutil.net_if_stats()返回的字典中,每个网卡对应的snicstats对象包含以下属性:
isup:布尔值,标记网卡是否处于启用状态duplex:双工模式,取值为psutil.NIC_DUPLEX_FULL(全双工)、psutil.NIC_DUPLEX_HALF(半双工)或psutil.NIC_DUPLEX_UNKNOWN(未知)speed:网卡传输速度,单位为Mbps,未知则返回0mtu:最大传输单元,单位为字节
示例代码
可以通过以下代码直观查看这些对象的属性值:
import psutil import socket # 遍历网卡地址信息 for ifname, addr_list in psutil.net_if_addrs().items(): print(f"=== 网卡: {ifname} ===") for addr in addr_list: print(f"地址族: {socket.AddressFamily(addr.family).name}") print(f"地址: {addr.address}") if addr.netmask: print(f"子网掩码: {addr.netmask}") if addr.broadcast: print(f"广播地址: {addr.broadcast}") if addr.ptp: print(f"点对点地址: {addr.ptp}") print() # 遍历网卡状态信息 for ifname, stat in psutil.net_if_stats().items(): print(f"=== 网卡: {ifname} ===") print(f"是否启用: {stat.isup}") print(f"双工模式: {stat.duplex}") print(f"速度: {stat.speed} Mbps") print(f"MTU: {stat.mtu}") print()
查看源码定义
如果需要确认类型的精确定义,可以直接查看psutil的平台相关源码文件:
snicaddr的定义通常在_pslinux.py、_pswindows.py等文件中,形式类似:from collections import namedtuple snicaddr = namedtuple('snicaddr', ['family', 'address', 'netmask', 'broadcast', 'ptp'])snicstats的定义形式类似:snicstats = namedtuple('snicstats', ['isup', 'duplex', 'speed', 'mtu'])
内容的提问来源于stack exchange,提问作者gastonceron
相关产品推荐
相关产品推荐

