最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)監(jiān)控遠(yuǎn)程主機實時數(shù)據(jù)的示例詳解

 更新時間:2023年04月06日 08:44:27   作者:Day-3  
這篇文章主要為大家詳細(xì)介紹了Python如何使用Socket庫和相應(yīng)的第三方庫來監(jiān)控遠(yuǎn)程主機的實時數(shù)據(jù),比如CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)帶寬等,感興趣的可以了解一下

0 簡述

實時監(jiān)控應(yīng)用程序,使用Python的Socket庫和相應(yīng)的第三方庫來監(jiān)控遠(yuǎn)程主機的實時數(shù)據(jù),比如CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)帶寬等信息??梢栽试S多個用戶同時訪問服務(wù)端。
注:部分指令響應(yīng)較慢,請耐心等待。

1 程序說明文檔

1.1 服務(wù)端

本程序為一個基于TCP協(xié)議的服務(wù)端程序,可以接收客戶端發(fā)送的指令并執(zhí)行相應(yīng)的操作,最終將操作結(jié)果返回給客戶端。程序運行在localhost(即本機)的8888端口。

主要功能及指令:

• 獲取CPU使用率:指令“cpu”

• 獲取內(nèi)存使用率:指令“memory”

• 獲取網(wǎng)絡(luò)帶寬信息:指令“network”

• 獲取當(dāng)前登錄用戶:指令“user”

• 獲取系統(tǒng)負(fù)載情況:指令“loadavg”

• 獲取當(dāng)前時間:指令“time”

• 獲取進(jìn)程列表:指令“process”

• 獲取系統(tǒng)信息:指令“system”

• 獲取網(wǎng)絡(luò)連接列表:指令“connection”

• 獲取GPU使用情況:指令“gpu”

• 獲取磁盤使用情況:指令“disk”

對于不同的指令,程序采用不同的庫函數(shù)進(jìn)行數(shù)據(jù)獲取和處理,具體如下:

• 對于指令“cpu”,使用psutil庫獲取CPU使用率。

• 對于指令“memory”,使用psutil庫獲取內(nèi)存使用率。

• 對于指令“network”,使用speedtest-cli庫獲取網(wǎng)絡(luò)帶寬信息。

• 對于指令“user”,使用psutil庫獲取當(dāng)前登錄用戶。

• 對于指令“loadavg”,使用os庫獲取系統(tǒng)負(fù)載情況。

• 對于指令“time”,使用datetime庫獲取當(dāng)前時間。

• 對于指令“process”,使用psutil庫獲取進(jìn)程列表。程序?qū)⑦M(jìn)程按照內(nèi)存使用量排序,只返回前10個進(jìn)程。

• 對于指令“system”,使用platform庫獲取系統(tǒng)信息。

• 對于指令“connection”,使用psutil庫獲取網(wǎng)絡(luò)連接列表。程序?qū)⑦B接按照進(jìn)程ID排序,只返回前10個連接。

• 對于指令“gpu”,使用nvidia-smi工具獲取GPU使用情況。

• 對于指令“disk”,使用psutil庫獲取磁盤使用情況。

每個指令的處理結(jié)果均以字符串形式返回給客戶端。在處理指令時,程序會判斷接收到的數(shù)據(jù)是否為空。如果為空,則斷開連接并關(guān)閉客戶端套接字。程序中的handle_client函數(shù)是負(fù)責(zé)與單個客戶端通信的線程函數(shù),每個客戶端連接都會啟動一個線程。

1.2 客戶端

該程序是一個簡單的TCP客戶端,可以連接到一個服務(wù)器并向其發(fā)送請求,然后等待服務(wù)器的響應(yīng)。程序使用Python的socket模塊來創(chuàng)建TCP套接字,并使用connect方法連接到一個服務(wù)器地址。程序通過循環(huán)不斷地等待用戶輸入請求數(shù)據(jù)類型,然后將請求數(shù)據(jù)類型編碼成UTF-8格式并使用sendall方法將其發(fā)送給服務(wù)器。接著程序等待服務(wù)器響應(yīng),并將響應(yīng)數(shù)據(jù)解碼成UTF-8格式并打印出來。最后,程序關(guān)閉客戶端套接字。

程序的主要流程如下:

1. 導(dǎo)入socket模塊。

2. 創(chuàng)建一個TCP套接字對象。

3. 連接到指定的服務(wù)器地址。

4. 循環(huán)等待用戶輸入請求數(shù)據(jù)類型。

5. 將請求數(shù)據(jù)類型編碼成UTF-8格式并發(fā)送給服務(wù)器。

6. 等待服務(wù)器響應(yīng)并接收響應(yīng)數(shù)據(jù)。

7. 將響應(yīng)數(shù)據(jù)解碼成UTF-8格式并打印出來。

8. 關(guān)閉客戶端套接字。

該程序可以用于與提供特定數(shù)據(jù)類型的服務(wù)器進(jìn)行通信。用戶可以輸入不同的請求數(shù)據(jù)類型來獲取不同類型的數(shù)據(jù)。服務(wù)器將根據(jù)請求類型返回相應(yīng)的數(shù)據(jù)。程序的運行依賴于服務(wù)器的可用性和響應(yīng)速度。如果服務(wù)器無法響應(yīng),程序?qū)⒁恢钡却钡椒?wù)器響應(yīng)或者程序被中斷。

2 代碼

服務(wù)端

import os
import socket
import subprocess
import threading
from datetime import datetime
from sys import platform

import psutil
from speedtest import Speedtest

# 創(chuàng)建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 綁定IP和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)

# 監(jiān)聽連接請求
server_socket.listen(5)


def handle_client(client_socket, client_address):
    while True:
        # 接收客戶端發(fā)送的數(shù)據(jù)
        data = client_socket.recv(1024)

        # 如果接收到空數(shù)據(jù),則斷開連接
        if not data:
            client_socket.close()
            print(f"Connection with {client_address} closed")
            break

        # 處理接收到的數(shù)據(jù)
        request = data.decode('utf-8')
        if request == 'cpu':
            # 使用psutil庫獲取CPU使用率
            cpu_percent = psutil.cpu_percent(interval=1)
            response_data = f'CPU使用率:{cpu_percent}%'.encode('utf-8')
        elif request == 'memory':
            # 使用psutil庫獲取內(nèi)存使用率
            memory_percent = psutil.virtual_memory().percent
            response_data = f'內(nèi)存使用率:{memory_percent}%'.encode('utf-8')
        elif request == 'network':
            # 使用speedtest-cli庫獲取網(wǎng)絡(luò)帶寬信息
            st = Speedtest()
            download_speed = st.download()
            upload_speed = st.upload()
            response_data = f'下載速度:{download_speed / 1000000}Mbps,上傳速度:{upload_speed / 1000000}Mbps'.encode('utf-8')
        elif request == 'user':
            # 使用psutil庫獲取當(dāng)前登錄用戶
            username = psutil.users()[0].name
            response_data = f'當(dāng)前登錄用戶:{username}'.encode('utf-8')
        elif request == 'loadavg':
            # 使用os庫獲取系統(tǒng)負(fù)載情況
            load_avg = os.getloadavg()
            response_data = f'系統(tǒng)負(fù)載情況:{load_avg}'.encode('utf-8')
        elif request == 'time':
            # 使用datetime庫獲取當(dāng)前時間
            current_time = datetime.datetime.now()
            response_data = f'當(dāng)前時間:{current_time}'.encode('utf-8')
        elif request == 'process':
            # 使用psutil庫獲取進(jìn)程列表
            process_list = []
            for process in psutil.process_iter(['pid', 'name', 'memory_info']):
                try:
                    process_list.append((process.info['pid'], process.info['name'], process.info['memory_info'].rss))
                except (psutil.AccessDenied, psutil.NoSuchProcess):
                    pass
            process_list.sort(key=lambda x: x[2], reverse=True)
            response_data = ''
            for i, (pid, name, memory) in enumerate(process_list[:10]):
                response_data += f'{i + 1}. 進(jìn)程名稱:{name},進(jìn)程ID:{pid},占用內(nèi)存:{memory / 1024 / 1024:.2f}MB\n'
            response_data = response_data.encode('utf-8')
        elif request == 'system':
            # 使用platform庫獲取系統(tǒng)信息
            system_info = f'操作系統(tǒng):{platform.system()} {platform.release()}\n處理器:{platform.processor()}\nPython版本:{platform.python_version()}'
            response_data = system_info.encode('utf-8')
        elif request == 'connection':
            # 使用psutil庫獲取網(wǎng)絡(luò)連接列表
            conn_list = []
            for conn in psutil.net_connections():
                if conn.status == psutil.CONN_ESTABLISHED:
                    conn_list.append((conn.laddr.ip, conn.laddr.port, conn.raddr.ip, conn.raddr.port, conn.pid))
            conn_list.sort(key=lambda x: x[4])
            response_data = ''
            for i, (laddr_ip, laddr_port, raddr_ip, raddr_port, pid) in enumerate(conn_list[:10]):
                response_data += f'{i + 1}. 本地地址:{laddr_ip}:{laddr_port},遠(yuǎn)程地址:{raddr_ip}:{raddr_port},進(jìn)程ID:{pid}\n'
            response_data = response_data.encode('utf-8')
        elif request == 'disk':
            # 使用psutil庫獲取磁盤使用情況
            disk_usage = psutil.disk_usage('/')
            disk_info = f'磁盤總?cè)萘浚簕disk_usage.total / 1024 / 1024 / 1024:.2f}GB,已用容量:{disk_usage.used / 1024 / 1024 / 1024:.2f}GB,可用容量:{disk_usage.free / 1024 / 1024 / 1024:.2f}GB'
            response_data = disk_info.encode('utf-8')
        elif request == 'load':
            # 使用psutil庫獲取系統(tǒng)負(fù)載
            load_avg = psutil.getloadavg()
            load_info = f'1分鐘內(nèi)平均負(fù)載:{load_avg[0]:.2f},5分鐘內(nèi)平均負(fù)載:{load_avg[1]:.2f},15分鐘內(nèi)平均負(fù)載:{load_avg[2]:.2f}'
            response_data = load_info.encode('utf-8')
        elif request == 'thread':
            # 使用psutil庫獲取進(jìn)程線程數(shù)
            thread_info = f'當(dāng)前進(jìn)程線程數(shù):{psutil.Process().num_threads()}'
            response_data = thread_info.encode('utf-8')
        else:
            response_data = b'Invalid request'

        # 發(fā)送響應(yīng)數(shù)據(jù)
        client_socket.sendall(response_data)


# 接收多個客戶端連接
while True:
    client_socket, client_address = server_socket.accept()
    print(f"New connection from {client_address}")
    # 創(chuàng)建新線程處理客戶端連接
    client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
    client_thread.start()

客戶端

import socket

# 創(chuàng)建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 連接服務(wù)器
server_address = ('localhost', 8888)
client_socket.connect(server_address)

while True:
    # 發(fā)送請求數(shù)據(jù)給服務(wù)器
    request = input("請輸入要請求的數(shù)據(jù)類型(cpu/memory/network/user/loadavg/time/process/system/connection/disk/load/thread):")
    client_socket.sendall(request.encode('utf-8'))

    # 接收服務(wù)器響應(yīng)數(shù)據(jù)
    response_data = client_socket.recv(1024)

    # 處理接收到的數(shù)據(jù)
    response = response_data.decode('utf-8')
    print(response)

# 關(guān)閉客戶端套接字
client_socket.close()

到此這篇關(guān)于Python實現(xiàn)監(jiān)控遠(yuǎn)程主機實時數(shù)據(jù)的示例詳解的文章就介紹到這了,更多相關(guān)Python監(jiān)控主機數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解

    淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解

    今天小編就為大家分享一篇淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 如何處理json中不帶雙引號的key的問題

    如何處理json中不帶雙引號的key的問題

    這篇文章主要介紹了如何處理json中不帶雙引號的key的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • python如何輸出反斜杠

    python如何輸出反斜杠

    在本篇內(nèi)容中小編給大家整理了一篇關(guān)于python怎么輸出反斜杠的相關(guān)基礎(chǔ)文章,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-06-06
  • python獲取當(dāng)前時間對應(yīng)unix時間戳的方法

    python獲取當(dāng)前時間對應(yīng)unix時間戳的方法

    這篇文章主要介紹了python獲取當(dāng)前時間對應(yīng)unix時間戳的方法,涉及Python時間操作的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • python通過nmap掃描在線設(shè)備并嘗試AAA登錄(實例代碼)

    python通過nmap掃描在線設(shè)備并嘗試AAA登錄(實例代碼)

    這篇文章主要介紹了python通過nmap掃描在線設(shè)備并嘗試AAA登錄,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python中def的用法以及def是什么意思詳解

    Python中def的用法以及def是什么意思詳解

    這篇文章主要介紹了Python中def的用法以及def是什么意思的相關(guān)資料,文中介紹了Python中函數(shù)的定義和使用方法,還給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-10-10
  • Python中那些 Pythonic的寫法詳解

    Python中那些 Pythonic的寫法詳解

    這篇文章主要介紹了Python中那些 Pythonic的寫法詳解,一份優(yōu)雅、干凈、整潔的代碼通常自帶文檔和注釋屬性,讀代碼即是讀作者的思路,需要的朋友可以參考下
    2019-07-07
  • 通過Python來使用七牛云存儲的方法詳解

    通過Python來使用七牛云存儲的方法詳解

    這篇文章主要介紹了通過Python來使用七牛云存儲的方法詳解,七牛云存儲是國內(nèi)領(lǐng)先的服務(wù)器數(shù)據(jù)備份解決方案商,需要的朋友可以參考下
    2015-08-08
  • Python中static相關(guān)知識小結(jié)

    Python中static相關(guān)知識小結(jié)

    static用法:是一個修飾符,用于修飾成員(成員變量,成員函數(shù)).當(dāng)成員被靜態(tài)修飾后,就多了一個調(diào)用方式,除了可以被對象調(diào)用外,還可以直接被類名調(diào)用,格式——類名.靜態(tài)成員。
    2018-01-01
  • PyQT5 QTableView顯示綁定數(shù)據(jù)的實例詳解

    PyQT5 QTableView顯示綁定數(shù)據(jù)的實例詳解

    今天小編就為大家分享一篇PyQT5 QTableView顯示綁定數(shù)據(jù)的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論

花莲市| 平谷区| 咸阳市| 永和县| 南江县| 绥芬河市| 秭归县| 绥芬河市| 合山市| 义乌市| 富源县| 泰州市| 郴州市| 东莞市| 达日县| 鄂托克旗| 金川县| 油尖旺区| 扎鲁特旗| 龙泉市| 南昌县| 新蔡县| 通州市| 平遥县| 武川县| 白水县| 彭阳县| 万全县| 汶川县| 德州市| 华安县| 托克托县| 乌拉特后旗| 延庆县| 琼海市| 五常市| 中西区| 江油市| 武强县| 遵义市| 和田县|