如何将psutil Process对象转换为可用字典?
如何将psutil.Process实例转换为包含指定字段的字典?
你不需要手动解析psutil.Process实例的字符串输出,psutil已经为Process对象提供了直接获取这些字段的属性和方法,这种方式更可靠且不易出错。
修改后的代码实现
首先在脚本顶部新增datetime模块导入,用于处理时间格式:
from datetime import datetime
然后在process = psutil.Process(pid)之后,替换注释部分的代码,生成目标字典:
# 生成包含指定字段的字典 service_info = { "name": process.name(), "pid": process.pid, "status": process.status(), "started": datetime.fromtimestamp(process.create_time()).strftime('%Y-%m-%d %H:%M:%S') } # 可直接打印或使用该字典 print(service_info)
完整修改后的脚本
#!/usr/bin/env python import re import psutil from datetime import datetime # 新增时间处理模块 def log_running_services(): known_cgroups = set() for pid in psutil.pids(): try: cgroups = open('/proc/%d/cgroup' % pid, 'r').read() except IOError: continue # 进程可能已退出或无权限访问 systemd_name_match = re.search( '^1:name=systemd:(/.+)$', cgroups, re.MULTILINE) if systemd_name_match is None: continue # 不在systemd维护的cgroup中 systemd_name = systemd_name_match.group(1) if systemd_name in known_cgroups: continue # 已处理过该服务,跳过 if not systemd_name.endswith('.service'): continue # 不是service类型,跳过 known_cgroups.add(systemd_name) print(systemd_name) process = psutil.Process(pid) # 生成目标字典 service_info = { "name": process.name(), "pid": process.pid, "status": process.status(), "started": datetime.fromtimestamp(process.create_time()).strftime('%Y-%m-%d %H:%M:%S') } # 输出结果 print(service_info) if __name__ == '__main__': log_running_services()
关键说明
process.name():获取进程名称process.pid:直接获取进程ID(属性,无需调用)process.status():获取进程状态(如sleeping)process.create_time():返回进程创建的时间戳,通过datetime.fromtimestamp()转换为你需要的字符串格式
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

