Python如何监听以太网适配器状态变化并触发对应事件
实现方案
第一步:安装依赖库
我们用psutil库跨平台获取网卡状态,执行以下命令安装:pip install psutil
第二步:核心代码实现
逻辑为常驻后台轮询网卡状态,和上一次的状态做对比,发生up/down变化时触发对应的操作,你可以自行修改回调函数里的自定义逻辑。
import psutil import time # 替换成你要监控的以太网适配器名称 # Windows可在 控制面板\网络和 Internet\网络连接 里查看,一般叫「以太网」 # Linux一般是eth0、enpXsX这类名称,可通过ip addr命令查看 MONITOR_IFACE = "以太网" # 轮询间隔,单位秒,1秒基本能满足实时性需求,占资源极低 CHECK_INTERVAL = 1 def on_interface_down(): """以太网断开时触发的操作,可自定义""" print("检测到以太网断开,执行断开后逻辑") # 这里写你要执行的操作,比如发通知、启动备份程序等等 def on_interface_up(): """以太网连接时触发的操作,可自定义""" print("检测到以太网连接成功,执行连接后逻辑") # 这里写你要执行的操作 def get_iface_status(iface_name): """获取指定网卡的状态,返回True为up,False为down""" all_interfaces = psutil.net_if_stats() if iface_name not in all_interfaces: # 未找到对应网卡,默认返回断开状态 return False return all_interfaces[iface_name].isup if __name__ == "__main__": # 初始化上一次的状态 last_status = get_iface_status(MONITOR_IFACE) print(f"启动监控,初始状态:{'连接' if last_status else '断开'}") while True: current_status = get_iface_status(MONITOR_IFACE) # 状态发生变化时触发对应逻辑 if current_status != last_status: if current_status: on_interface_up() else: on_interface_down() # 更新状态记录 last_status = current_status time.sleep(CHECK_INTERVAL)
第三步:配置后台运行
- Windows平台:可以用
nssm工具把这个Python脚本注册成系统服务,开机自动启动,后台静默运行 - Linux/Mac平台:可以写systemd服务配置,或者直接用
nohup python 你的脚本名.py &命令后台挂起运行
扩展说明
- 如果需要监控所有以太网接口,不要指定单个
MONITOR_IFACE,遍历psutil.net_if_stats()的结果,过滤出以太网类型的接口批量监控即可 - 轮询间隔可以根据你的需求调整,对实时性要求不高的话可以调到5-10秒,进一步降低资源占用
内容的提问来源于stack exchange,提问作者CaptainRubbish
相关产品推荐
相关产品推荐

