python获取当前网线的插拔状态

1、背景

 当前项目在网线插拔时 需要重启一些服务。因此通过ethtool eth0命令来获取网口的状态。

#!/usr/bin/env python3
# coding=utf-8
# create at 2019-11-06

import subprocess
import threading


class MonitorNetwork:
    '用于网络状态监听 发送给主模块 用于服务重启'
    '''
    传入要监听的端口号
    '''
    name = [0];

    def callBack(self, change):
        print("我是回调函数!")

    '''
    保存状态 用于缓存要监听的每个端口的状态
    '''
    status = [];
    '''
    初始化函数 接收要监听的端口号 以数组形式传入 [0, 1, 2, 3...]等等
    '''
    def __init__(self, name, callBack):
        self.name = name;
        self.callBack = callBack;
        # 调用监听函数
        self.MonitorNetworkStatus();

    """
    根据接口名称获取接口信息
    """
    def getEthtool(self):
        # val = os.system('ethtool eth' + str(name) + '| grep Link');
        list = [];
        for _name in self.name:
            p = subprocess.Popen(["ethtool eth" + str(_name) + " | grep Link | awk {'print $3'}"], shell=True,
                                 stdout=subprocess.PIPE).communicate()
            # 二维数组 0位保存的是监控的端口号 1位是状态
            list.append([_name, bool(p[0])]);
        return list;

    """
    监听端口线程启动
    timer 用于对外暴露线程终止
    """
    timer = None;

    def MonitorNetworkStatus(self):
        statusArr = self.getEthtool();
        change = [];
        print(statusArr)
        for i in range(0, len(statusArr)):
            _status = statusArr[i];
            if bool(len(_status)) & len(self.status) == len(_status):
                if (_status[1] != self.status[i][1]):
                    change.append(_status);
                    self.status[i][1] = _status[1];
            else:
                self.status.append(_status);
        if bool(len(change)):
            # 将change发送出去
            self.callBack(change);
            print('发送消息');
        self.timer = threading.Timer(6000, self.MonitorNetworkStatus);
        self.timer.start()

    '''
    线程终止 停止监控
    '''
    def stopMonitor(self):
        self.timer.join()


# ntArr = [0, 1];
#
# def callBack(change):
#     print("123");
#
# nt = MonitorNetwork(ntArr, callBack);

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值