mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-07-13 17:12:21 +08:00
184 lines
6.8 KiB
Python
Executable File
184 lines
6.8 KiB
Python
Executable File
PROC_UPTIME = "/proc/uptime"
|
||
PROC_CPU = "/proc/stat"
|
||
PROC_MEM = "/proc/meminfo"
|
||
PROC_NET = "/proc/net/dev"
|
||
|
||
import enum
|
||
import psutil
|
||
from PyQt5.QtCore import *
|
||
|
||
class infoUtils:
|
||
class RateUnit(enum.Enum):
|
||
RateBit = 0,
|
||
RateByte = 1,
|
||
RateKb = 2,
|
||
RateMb = 3,
|
||
RateGb = 4,
|
||
RateTb = 5,
|
||
RateUnknow = 6
|
||
|
||
class Sensitive(enum.Enum):
|
||
Default = 0, # 大小写混合
|
||
Upper = 1, # 全部大写
|
||
Lower = 2 # 全部小写
|
||
|
||
def setRateUnitSensitive(self, unit: RateUnit, sensitive: Sensitive):
|
||
if (sensitive == self.Sensitive.Default):
|
||
if (unit == self.RateUnit.RateBit):
|
||
return str("b/s")
|
||
elif (unit == self.RateUnit.RateByte):
|
||
return str("B/s")
|
||
elif (unit == self.RateUnit.RateKb):
|
||
return str("Kb/s")
|
||
elif (unit == self.RateUnit.RateMb):
|
||
return str("Mb/s")
|
||
elif (unit == self.RateUnit.RateGb):
|
||
return str("Gb/s")
|
||
elif (unit == self.RateUnit.RateTb):
|
||
return str("Tb/s")
|
||
else:
|
||
# print("Sensitive::Default, RateUnit is RateUnknow.")
|
||
return str("")
|
||
elif (sensitive == self.Sensitive.Upper):
|
||
if (unit == self.RateUnit.RateBit):
|
||
return str("BIT/S")
|
||
elif (unit == self.RateUnit.RateByte):
|
||
return str("B/S")
|
||
elif (unit == self.RateUnit.RateKb):
|
||
return str("KB/S")
|
||
elif (unit == self.RateUnit.RateMb):
|
||
return str("MB/S")
|
||
elif (unit == self.RateUnit.RateGb):
|
||
return str("GB/S")
|
||
elif (unit == self.RateUnit.RateTb):
|
||
return str("TB/S")
|
||
else:
|
||
#print("Sensitive::Upper, RateUnit is RateUnknow.")
|
||
return str("")
|
||
elif (sensitive == self.Sensitive.Lower):
|
||
if (unit == self.RateUnit.RateBit):
|
||
return str("bit/s")
|
||
elif (unit == self.RateUnit.RateByte):
|
||
return str("b/s")
|
||
elif (unit == self.RateUnit.RateKb):
|
||
return str("kb/s")
|
||
elif (unit == self.RateUnit.RateMb):
|
||
return str("mb/s")
|
||
elif (unit == self.RateUnit.RateGb):
|
||
return str("gb/s")
|
||
elif (unit == self.RateUnit.RateTb):
|
||
return str("tb/s")
|
||
else:
|
||
#qDebug()<<str("Sensitive::Lower, RateUnit is RateUnknow.")
|
||
return str("")
|
||
else:
|
||
# qDebug()<<str("Sensitive is RateUnknow.")
|
||
return str("")
|
||
|
||
# TODO unit 在原来是指针,这里还没做处理
|
||
def autoRateUnits(self, speed: int, unit: RateUnit) -> float:
|
||
# 自动判断合适的速率单位,默认传进来的是 Byte
|
||
# * bit 0 ~ 7 位 (不到 1 字节)
|
||
# * Byte 1 ~ 2^10 Byte
|
||
# * KB 2^10 ~ 2^20 Byte
|
||
# * MB 2^20 ~ 2^30 Byte
|
||
# * GB 2^30 ~ 2^40 Byte
|
||
# * TB 2^40 ~ 2^50 Byte
|
||
if (unit != self.RateUnit.RateByte):
|
||
#print("请先将单位转为字节(byte)后再传参")
|
||
return -1
|
||
sp = 0
|
||
if (0 <= speed and speed < pow(2, 10)):
|
||
unit = self.RateUnit.RateByte
|
||
sp = speed
|
||
elif (pow(2, 10) <= speed and speed < pow(2, 20)):
|
||
unit = self.RateUnit.RateKb
|
||
sp = float(speed / pow(2, 10) * 1.0)
|
||
elif (pow(2, 20) <= speed and speed < pow(2, 30)):
|
||
unit = self.RateUnit.RateMb
|
||
sp = float(speed / pow(2, 20) * 1.0)
|
||
elif (pow(2, 30) <= speed and speed < pow(2, 40)):
|
||
unit = self.RateUnit.RateGb
|
||
sp = float(speed / pow(2, 30) * 1.0)
|
||
elif (pow(2, 40) <= speed and speed < pow(2, 50)):
|
||
unit = self.RateUnit.RateTb
|
||
sp = float(speed / pow(2, 40) * 1.0)
|
||
else:
|
||
unit = self.RateUnit.RateUnknow
|
||
# qDebug()<<"本设备网络速率单位传输超过 TB, 或者低于 0 Byte."
|
||
sp = -1
|
||
return sp
|
||
|
||
# TODO run,idle 在原来是指针,这里还没做处理
|
||
def uptime(self):
|
||
file = QFile(PROC_UPTIME) # /proc/uptime
|
||
if(not file.open(QIODevice.ReadOnly or QIODevice.Text)):
|
||
return
|
||
stream = QTextStream(file)
|
||
line = stream.readLine()
|
||
list = line.split(QRegExp("\\s{1,}"))
|
||
if(list.count()):
|
||
run = float(list[0])
|
||
idle = float(list[1])
|
||
file.close()
|
||
return run, idle
|
||
|
||
# TODO netDown, netUpload 在原来是指针,这里还没做处理
|
||
def netRate(self, netDown, netUpload):
|
||
file = QFile(PROC_NET) # /proc/net/dev
|
||
if (not file.open(QIODevice.ReadOnly or QIODevice.Text)): # 在读取时,把行尾结束符修改为 '\n'; 在写入时,把行尾结束符修改为本地系统换行风格,比如Windows文本换行是 "\r\n"
|
||
return
|
||
down = 0
|
||
upload = 0
|
||
stream = QTextStream(file)
|
||
line = stream.readLine()
|
||
line = stream.readLine()
|
||
line = stream.readLine()
|
||
while (not line.isNull()):
|
||
line = line.trimmed()
|
||
list = line.split(QRegExp("\\s{1,}")) # 匹配任意 大于等于1个的 空白字符
|
||
if (list.count()):
|
||
down = int(list[1])
|
||
upload = int(list[9])
|
||
netDown += down
|
||
netUpload += upload
|
||
line = stream.readLine()
|
||
file.close()
|
||
|
||
'''def cpuRate(self, cpuAll, cpuFree):
|
||
cpuAll = cpuFree = 0
|
||
ok = False
|
||
file = QFile(PROC_CPU) # /proc/stat
|
||
if(not file.open(QIODevice.ReadOnly or QIODevice.Text)):
|
||
return
|
||
stream = QTextStream(file)
|
||
line = stream.readLine()
|
||
if (line != None):
|
||
list = line.split(QRegExp("\\s{1,}"))
|
||
for (auto v = list.begin() + 1 v != list.end() ++v)
|
||
cpuAll += (*v).toLong(&ok)
|
||
cpuFree = list.at(4).toLong(&ok)
|
||
file.close()'''
|
||
|
||
def memoryRate(self):
|
||
memory = memoryAll = 0
|
||
swap = swapAll = None
|
||
'''ok = False
|
||
file = QFile(PROC_MEM) # /proc/meminfo
|
||
if (not file.open(QIODevice.ReadOnly or QIODevice.Text)):
|
||
return
|
||
stream = QTextStream(file)
|
||
buff = [0]
|
||
for i in range(16):
|
||
line = stream.readLine()
|
||
list = line.split(QRegExp("\\s{1,}"))
|
||
buff[i] = int(list[1])
|
||
memoryAll = buff[0]
|
||
memory = buff[0] - buff[2]
|
||
swapAll = buff[14]
|
||
swap = buff[14] - buff[15]
|
||
file.close()'''
|
||
mem = psutil.virtual_memory()
|
||
memoryAll = int(mem.total / 1024)
|
||
memory = int(mem.used/ 1024)
|
||
return memory, memoryAll, swap, swapAll |