这是什么
这是一个py 编写的程序,功能上面是用于获取 NVIDIA 显卡的占用率,并通过串口将其发送出去。同时,程序也会读取串口接收到的数据并显示在终端上,这样方便调试。
注意
因为我用的是N卡所以这个程序限制N卡使用,然后你如果要测试需要把 port
变量设置为正确的串口名称,波特率也要配合一下
import subprocess
import serial
import time
def get_gpu_usage():
# 运行 `nvidia-smi` 并获取输出
result = subprocess.run(['nvidia-smi', '--query-gpu=utilization.gpu', '--format=csv,noheader,nounits'],
stdout=subprocess.PIPE,
text=True)
# 解析输出
gpu_usage = int(result.stdout.strip())
return gpu_usage
def send_usage_via_serial(ser, usage):
# 创建要发送的字符串
usage_str = f"GPU Usage: {usage}%\n" # 创建以 "GPU Usage: xx%" 格式的字符串
print(f"Sending: {usage_str.strip()}") # 调试输出,去掉末尾的换行符
ser.write(usage_str.encode()) # 编码为字节流发送
def read_from_serial(ser):
if ser.in_waiting > 0:
return ser.read(ser.in_waiting).decode('utf-8').strip()
return None
if __name__ == "__main__":
port = 'COM10'
baudrate = 115200
timeout = 1
try:
# 初始化串口连接
ser = serial.Serial(port, baudrate=baudrate, timeout=timeout)
print(f"串口 {port} 已连接。")
while True:
try:
# 获取 GPU 占用百分比
gpu_usage = get_gpu_usage()
# 显示在终端
print(f"GPU Usage: {gpu_usage}%")
# 通过串口发送 GPU 占用百分比
send_usage_via_serial(ser, gpu_usage)
# 读取并显示串口收到的信息
received_data = read_from_serial(ser)
if received_data:
print(f"Received from serial: {received_data}")
# 等待 0.9 秒
time.sleep(0.2)
except Exception as e:
print(f"发生错误: {e}")
except KeyboardInterrupt:
print("程序已终止。")
except Exception as e:
print(f"初始化串口时发生错误: {e}")
finally:
if ser.is_open:
ser.close() # 确保在程序结束时关闭串口连接
print(f"串口 {port} 已关闭。")