linux系统利用python和必要的库,实时监测计算机的基本运行参数:如CPU负荷、内存占用率、温度等等,每秒获取一次数据,连续监测600秒,然后保存到一个excel表格文件中。在首行需要添加参数文字说明。文件名称格式:年月日时分秒;产一个word报告文件:包括1个标题、2个子标题及段落,写出2段数据分析文字,计算出最大值、最小值及平均值,并插入相关的数据波形和必要的LEGEND文字、图编号、图文字说明等;
时间: 2023-12-03 12:45:45 浏览: 154
好的,这是一个比较复杂的任务,需要使用多个 Python 库来实现。首先,我们需要使用 psutil 库来获取系统的 CPU 负荷和内存占用率数据。然后,我们可以使用 PySerial 库来读取计算机的温度数据。最后,我们可以使用 pandas 和 xlsxwriter 库来将数据保存为 Excel 文件。
以下是实现该任务的代码示例:
```python
import psutil
import serial
import pandas as pd
import xlsxwriter
import datetime
# 获取当前时间,作为文件名
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
# 打开串口,读取温度数据
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write(b'temperature\n')
temp_data = ser.readline().decode().strip()
# 获取 CPU 负荷和内存占用率数据
cpu_percent = psutil.cpu_percent()
mem_percent = psutil.virtual_memory().percent
# 将数据保存到 DataFrame 中
data = pd.DataFrame({
'CPU负荷': [cpu_percent],
'内存占用率': [mem_percent],
'温度': [temp_data]
})
# 将数据保存到 Excel 文件中
writer = pd.ExcelWriter(f'{now}.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='监测数据', index=False)
# 添加参数文字说明
workbook = writer.book
worksheet = writer.sheets['监测数据']
worksheet.write(0, 0, 'CPU负荷')
worksheet.write(0, 1, '内存占用率')
worksheet.write(0, 2, '温度')
# 连续监测 600 秒,每秒获取一次数据
for i in range(600):
# 获取 CPU 负荷和内存占用率数据
cpu_percent = psutil.cpu_percent()
mem_percent = psutil.virtual_memory().percent
# 打开串口,读取温度数据
ser.write(b'temperature\n')
temp_data = ser.readline().decode().strip()
# 将数据添加到 DataFrame 中
data = data.append({
'CPU负荷': cpu_percent,
'内存占用率': mem_percent,
'温度': temp_data
}, ignore_index=True)
# 每隔 10 秒保存一次数据到 Excel 文件中
if i % 10 == 0:
data.to_excel(writer, sheet_name='监测数据', index=False, startrow=i+1)
# 计算最大值、最小值和平均值
max_cpu = data['CPU负荷'].max()
min_cpu = data['CPU负荷'].min()
avg_cpu = data['CPU负荷'].mean()
max_mem = data['内存占用率'].max()
min_mem = data['内存占用率'].min()
avg_mem = data['内存占用率'].mean()
max_temp = data['温度'].astype(float).max()
min_temp = data['温度'].astype(float).min()
avg_temp = data['温度'].astype(float).mean()
# 生成报告文件
report = f"""
<h1>计算机监测报告</h1>
<h2>CPU 负荷数据分析</h2>
<p>最大值:{max_cpu}</p>
<p>最小值:{min_cpu}</p>
<p>平均值:{avg_cpu}</p>
<img src="cpu.png" alt="CPU负荷波形图">
<h2>内存占用率数据分析</h2>
<p>最大值:{max_mem}</p>
<p>最小值:{min_mem}</p>
<p>平均值:{avg_mem}</p>
<img src="mem.png" alt="内存占用率波形图">
<h2>温度数据分析</h2>
<p>最大值:{max_temp}</p>
<p>最小值:{min_temp}</p>
<p>平均值:{avg_temp}</p>
<img src="temp.png" alt="温度波形图">
"""
# 将报告保存为 HTML 文件
with open(f'{now}.html', 'w') as f:
f.write(report)
# 生成 CPU 负荷波形图
data.plot(y='CPU负荷')
plt.savefig('cpu.png')
# 生成内存占用率波形图
data.plot(y='内存占用率')
plt.savefig('mem.png')
# 生成温度波形图
data['温度'] = pd.to_numeric(data['温度'], errors='coerce')
data.plot(y='温度')
plt.savefig('temp.png')
```
我们使用了一个 DataFrame 来保存获取的数据,并将其保存到 Excel 文件中。然后,我们使用 matplotlib 库来生成波形图,并将其保存为 PNG 文件。最后,我们使用字符串格式化来生成报告文件,并将其保存为 HTML 文件。
请注意,此代码示例仅供参考。实际使用时,您可能需要根据您的具体需求进行修改和调整。
阅读全文