python 多程序加協程 採集snmp資訊(一

2021-08-20 09:42:44 字數 1964 閱讀 8952

說明:執行環境為centos7, python2.7.在ubuntu測試**可以執行,但需要修改oid型別.關於snmp安裝和配置,請查閱相關教程.

首先檢測伺服器snmp服務是否可用,在終端輸入以下命令會有系統資訊輸出:

snmpwalk -v2c -c public localhost sysdesc

先介紹該命令, "snmpwalk" 表示採用walk方法,此外還有get等方法; "-v2c",2表示版本;"pubulic"是預設的community, 簡單理解為採集的密碼,可自行設定;"localhost"是採集的主機或路由器位址; "

sysdesc"即oid, 表示採集的選項,若在ubuntu下不識別可換為"1.3.6.1.2.1.1.1.0

",兩種採集結果相同.

直接上**

# -*- coding:utf-8 -*-

import time

import subprocess

from collections import defaultdict

建立乙個查詢項dict

oiddict =
獲取連線資訊

class selectsnmp(object):

"""查詢snmp資訊,匯入portinfo表"""

def __init__(self, host, community, version=2):

self.ip = host

self.community = community

self.version = version

self.portinfo = defaultdict(dict)

採用subprocess採集snmp相關資訊

def search_port(self, mib):

"""查詢埠資料"""

cmd = 'snmpwalk -v%sc -c %s %s %s' % (self.version, self.community, self.ip, mib)

proc = subprocess.popen(cmd, shell=true, stdout=subprocess.pipe)

return proc.stdout.readlines()

處理返回資料; 對應每個埠,都有唯一的port_id,返回查詢的value和port_id

def parse_line(self, row):

"""資料處理"""

before, after = row.split('=')

port_id = before.split('.')[-1].strip() if before else "

value = after.split(':')[-1].split('.')[0].strip() if after else "

return port_id, value

遍歷需要查詢的字典,構建portinfo, 

def search_mib(self):

"""獲取mid, 構建portinfo"""

try:

for key, mid in oiddict.items():

rows = self.search_port(mid)

if rows:

for row in rows:

port_id, value = self.parse_line(row)

self.portinfo[port_id][key] = value

return self.portinfo

except exception as e:

print(e, 'in search_mib')

return {}

呼叫search_mib可以獲取採集資料,關於多程序和協程配合,下節繼續

python 多程序 04 協程

協程是程式設計師創造出來的 單純的協程沒有作用 需要io操作時候進行切換 才有意義 原理 greenlet import greenlet def f1 print 11 gr2.switch print 33 gr2.switch def f2 print 22 gr1.switch print ...

python 多程序 協程 實現併發

使用程序池創 pool 建程序,用佇列 queue 進行程序間通訊。在子程序裡邊用協程去處理。直接上 from datetime import datetime from multiprocessing import pool,manager import asyncio from random i...

多執行緒 多程序 協程

占用的資源 程序 執行緒 協程 程序的顆粒度太大,每次都要有上下的調入,儲存,調出。執行緒 乙個軟體的執行不可能是一條邏輯執行的,必定有多個分支和多個程式段,就好比要實現程式a,實際分成 a,b,c等多個塊組合而成 這裡的a,b,c就是執行緒,也就是說執行緒是共享了程序的上下文環境,的更為細小的cp...