1. 程式人生 > >[Python Study Notes]CS架構遠程訪問獲取信息--SERVER端v2.0

[Python Study Notes]CS架構遠程訪問獲取信息--SERVER端v2.0

comm 賦值 type 9.1 ket partition {} python script

更新內容:

1.增加內存信息獲取

2.增加電池信息獲取

3.增加磁盤信息獲取

4.重新布局窗體

5.增加窗體名稱

6.增加連接成功之前,不可按壓


‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘
>>文件: ps_server.py
>>作者: liu yang
>>郵箱: [email protected]
>>博客: www.cnblogs.com/liu66blog

‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from socket import *
import  psutil
from time import sleep


‘‘‘得到cpu使用率‘‘‘
‘‘‘返回值:(float)cpu使用率‘‘‘
def get_cpu_percent():
    cpu_start_alltime=psutil.cpu_times()
    ‘‘‘print(cpu_start_alltime)得到的內容:scputimes(user=14088.359375, system=20540.59375,
                            idle=362071.6875, interrupt=847.9375019073486, dpc=3795.6875)‘‘‘
    t1all=sum(cpu_start_alltime)#開始的cpu時間總和
    sleep(1)#休眠一秒
    cpu_end_alltime=psutil.cpu_times()
    t2all=sum(cpu_end_alltime)#結束時的cpu時間總和
    t1busy=t1all-cpu_start_alltime.idle#開始的忙碌時間=總時間-空閑時間
    t2busy=t2all-cpu_end_alltime.idle
    ‘‘‘cpu使用率:(結束的忙碌時間-開始的忙碌時間)/(結束的總時間-開始的總時間)‘‘‘
    cpu_busy=(t2busy-t1busy)/(t2all-t1all)*100
    # print("cpu使用率:%0.2f"%cpu_busy+‘%‘)
    return  cpu_busy
# 另一種寫法
# def get_cpu_percent():
#     return psutil.cpu_percent(1)


‘‘‘將bytes數轉換成更加直觀的符號顯示‘‘‘
‘‘‘返回值:(str)兩位浮點數+B‘‘‘
def bytes2symbols(bytes_value):
    ‘‘‘單位符號‘‘‘
    symbols = (‘K‘ ,‘M‘, ‘G‘, ‘T‘, ‘P‘, ‘E‘, ‘Z‘, ‘Y‘)
    ‘‘‘每個單位對應的bytes數的字典,先定義為空‘‘‘
    prefix={}
    ‘‘‘要得到這樣的{K:1024, M:1024*1024,G:1024**3},進行for循環‘‘‘
    for i,s in enumerate(symbols):
        # ‘‘‘enumerate()為列舉函數‘‘‘
        # ‘‘‘i:代表下標‘‘‘
        # ‘‘‘s:代表改下標對應的值‘‘‘
        # ‘‘‘取到符號元組的值,作為prfix字典的key,根據key給value進行賦值‘‘‘
        prefix[s]=1024**(i+1)
    # ‘‘‘打印得到的對應字典‘‘‘
    # print(prefix)
    symbols_value=0
    symbol=‘‘
    # ‘‘‘循環prefix字典,得到轉換值‘‘‘
    for key,value in prefix.items():
        if bytes_value >=value :
            symbols_value=bytes_value/value
            symbol=key
        # 如果不滿足最小的KB,則以B顯示
        elif bytes_value <1024:
            return  ‘%0.2fB‘%bytes_value
        # ‘‘‘返回轉換值(str)‘‘‘
    return  ‘%0.2f%sB‘%(symbols_value,symbol)


‘‘‘得到內存信息‘‘‘
‘‘‘返回值:(str)內存信息‘‘‘
def get_memory():
    nt=psutil.virtual_memory()
    # 得到的數據:svmem(total=8482263040, available=1770676224, percent=79.1, used=6711586816, free=1770676224)
    # print(nt)
    total=bytes2symbols(nt.total)
    available=bytes2symbols(nt.available)
    percent=bytes2symbols(nt.percent)
    used=bytes2symbols(nt.used)
    free=bytes2symbols(nt.free)
    return ("總內存:%4s  \n可使用:%4s  \n已使用:%4s"%(total,available,used))


‘‘‘得到電池信息‘‘‘
‘‘‘返回值:(str)電池信息‘‘‘
def get_battery():
    ba=psutil.sensors_battery()
    # 未充電:sbattery(percent=13, secsleft=4294967295, power_plugged=False)
    # 在充電:sbattery(percent=14, secsleft= < BatteryTime.POWER_TIME_UNLIMITED: -2 >, power_plugged = True)
    battery=ba.percent
    if ba.power_plugged:
        power="正在充電中..."
    else:
        power="未充電"
    return (‘電量剩余:%d  電源狀態:%2s‘%(battery,power))


‘‘‘磁盤分區信息顯示‘‘‘
‘‘‘返回值:(str)磁盤信息‘‘‘
def get_disk():
    # 得到磁盤詳細信息的列表
    disks = psutil.disk_partitions()
    # 磁盤信息列表
    disk_list = []
    disk_str=‘‘
    # 循環列表,打印
    for disk in disks:
        disk_list.append(‘disk:%2s type:%4s opts:%8s \n‘ % (disk.device, disk.fstype, disk.opts))
        disk_str+=‘disk:%2s type:%4s opts:%8s \n‘ % (disk.device, disk.fstype, disk.opts)
    # print(disk_str)
    return disk_str


# 在這裏定義一個字典,存儲字符和對應函數關系
command_dict={‘cpu‘:get_cpu_percent,‘memory‘:get_memory,‘battery‘:get_battery,‘disk‘:get_disk,}

# 創建服務端 TCP/IP IPv4
server=socket(AF_INET,SOCK_STREAM)
server.bind((‘localhost‘,66))
server.listen(5)
print("等待客戶端進行連接...")

while True:
    # 等待連接阻塞
    conn,addr=server.accept()
    # 元祖取值需要用方括號!!!
    print("%s已連接..."%addr[0])
    while True:
        data = conn.recv(1024).decode(‘utf-8‘)
        if data in command_dict.keys():
            print(command_dict[data]())
            buf=str(command_dict[data]()).encode(‘utf-8‘)
            print(buf.decode())
            conn.send(buf)
        if not data:
            print("客戶按可能已斷開連接...")
            break
    conn.close()
conn.close()


[Python Study Notes]CS架構遠程訪問獲取信息--SERVER端v2.0