如何用Python及正则表达式检测CPU占用≥80%的进程
解决你的两个Python CPU进程检测需求
一、检测系统中是否存在CPU占用率≥80%的进程
我推荐用psutil这个跨平台的Python库来实现,它能轻松获取系统进程的各项指标,不用自己调用系统命令再解析,省心很多。
步骤:
- 先安装psutil:
pip install psutil - 编写检测代码:
代码说明:import psutil def check_high_cpu_processes(threshold=80.0): # 先让psutil获取一次当前状态,避免第一次返回0值 psutil.cpu_percent(interval=0.1) high_cpu_processes = [] for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']): try: cpu_usage = proc.info['cpu_percent'] if cpu_usage >= threshold: high_cpu_processes.append({ 'pid': proc.info['pid'], 'name': proc.info['name'], 'cpu_percent': cpu_usage }) except (psutil.NoSuchProcess, psutil.AccessDenied): # 跳过无法访问或已结束的进程 continue return high_cpu_processes # 调用函数检测 result = check_high_cpu_processes() if result: print("检测到CPU占用≥80%的进程:") for proc in result: print(f"PID: {proc['pid']}, 进程名: {proc['name']}, CPU占用率: {proc['cpu_percent']}%") else: print("未检测到CPU占用≥80%的进程")- 提前调用
psutil.cpu_percent(interval=0.1)是为了初始化数据,这个方法第一次调用通常返回0,第二次才能拿到真实的CPU使用率 - 捕获
NoSuchProcess和AccessDenied异常,避免因进程突然结束或权限不足导致代码崩溃 - 返回结果是结构化的进程信息列表,方便后续进一步处理
- 提前调用
二、从字符串变量中用正则表达式检测CPU占用≥80%的进程
根据你提供的命令输出格式,我们需要精准匹配5Sec列中数值≥80的百分比字段,避免误匹配开头的系统总CPU使用率。
正则表达式方案:
我给你两种思路,按需选择:
- 精准匹配5Sec列:用正向预查确保匹配的是进程行的5Sec字段,不会误抓开头的系统总CPU
(\d+\.\d+|\d+)%(?=\s+\d+\.\d+%\s+\d+\.\d+%\s+\d+\s+.+) - 简化匹配(不区分位置):先抓所有百分比格式的内容,再筛选数值≥80的,适合不需要严格区分字段的场景
(\d+\.\d+|\d+)%
Python代码示例:
假设你的输出字符串存在output_str变量中:
import re def check_high_cpu_from_string(output_str): # 用精准匹配的正则,只抓5Sec列的百分比 pattern = re.compile(r'(\d+\.\d+|\d+)%(?=\s+\d+\.\d+%\s+\d+\.\d+%\s+\d+\s+.+)') matches = pattern.findall(output_str) # 筛选出数值≥80的结果 high_cpu_values = [match for match in matches if float(match) >= 80.0] if high_cpu_values: print(f"检测到CPU占用≥80%的进程,对应CPU值为:{', '.join(high_cpu_values)}%") return True else: print("未检测到CPU占用≥80%的进程") return False # 测试用的输出字符串(替换成你自己的变量即可) output_str = """CPU utilization for five seconds: 81%/0%; one minute: 30%; five minutes: 26% PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 3 6765 291 23247 60.24% 8.07% 1.72% 3 SSH Process 126 22753 14985 1518 4.97% 0.88% 0.43% 0 IP Input 219 424447 390715 1086 1.84% 1.73% 1.66% 0 MMA DP TIMER 70 263766 25673 10274 80.00% 1.0...""" # 调用检测函数 check_high_cpu_from_string(output_str)
如果用简化匹配的思路,代码可以更短:
def check_high_cpu_simple(output_str): pattern = re.compile(r'(\d+\.\d+|\d+)%') all_cpu_values = [float(match) for match in pattern.findall(output_str)] if any(val >= 80 for val in all_cpu_values): print("检测到CPU占用≥80%的进程") return True else: print("未检测到CPU占用≥80%的进程") return False
内容的提问来源于stack exchange,提问作者StackP
相关产品推荐
相关产品推荐

