如何在Python制作进程监视器?
进程监视器是一种显示系统信息(如进程、内存、网络和其他内容)的工具。有很多可用的工具,但我们可以使用Python制作我们自己的进程监视器。在Python,有一个名为psutil的模块,我们可以使用它来获取有关我们系统的各种信息。
需要的模块
- psutil :在终端中键入以下命令以安装此模块。
python3 -m pip install psutil
- Prettytable:要在控制台上打印数据,我们可以使用格式化模块PrettyTable :
python3 -m pip install prettytable
使用 psutil
psutil提供了许多功能来监视系统。我们将简要介绍其中的一些:
- 首先,我们需要导入psutil:
import psutil
- 列出进程 ID:
psutil.pids() # [1,2,.....4352]
- 获取进程信息:
process_id = 1
psutil.Process(process_id)
# psutil.Process(pid=1, name='systemd', status='sleeping', started='19:49:25')
- 我们可以访问这个过程的各种键:
process = psutil.Process(process_id)
process.name()
process.status()
- 访问电池状态:
psutil.sensors_battery()
psutil.sensors_battery().percent
- 访问网络接口:
psutil.net_if_stats()
psutil.net_if_stats()['wlo1'].isup # True
- 我们还可以检查内存:
psutil.virtual_memory()
psutil.virtual_memory().total # 8180498432 (In Bytes)
psutil.virtual_memory().used # 2155720704
psutil.virtual_memory().available # 5563060224
现在我们知道了一些基本功能,我们可以实现进程监视器。创建一个新的Python文件并在其中添加以下代码。下面的代码适用于 Linux 发行版。对于其他操作系统,某些功能可能略有不同。
方法:
- 导入所需的包。
- 使用 subprocess 模块的 call()函数清除控制台。我们可以根据操作系统使用“clear”或“cls”命令。
- 获取电池信息
- 获取网络信息并将其打印为 PrettyTable
- 获取内存信息
- 获取进程信息
- 创建延迟。我们使用 time.sleep(1) 创建了一个 1 秒的延迟
- 按 CTRL+C 停止程序。
下面是实现:
Python3
# Import the required libraries
import psutil
import time
from subprocess import call
from prettytable import PrettyTable
# Run an infinite loop to constantly monitor the system
while True:
# Clear the screen using a bash command
call('clear')
print("==============================Process Monitor\
======================================")
# Fetch the battery information
battery = psutil.sensors_battery().percent
print("----Battery Available: %d "%(battery,) + "%")
# We have used PrettyTable to print the data on console.
# t = PrettyTable()
# t.add_row()
# Fetch the Network information
print("----Networks----")
table = PrettyTable(['Network', 'Status', 'Speed'])
for key in psutil.net_if_stats().keys():
name = key
up = "Up" if psutil.net_if_stats()[key].isup else "Down"
speed = psutil.net_if_stats()[key].speed
table.add_row([name, up, speed])
print(table)
# Fetch the memory information
print("----Memory----")
memory_table = PrettyTable(["Total", "Used",
"Available", "Percentage"])
vm = psutil.virtual_memory()
memory_table.add_row([
vm.total,
vm.used,
vm.available,
vm.percent
])
print(memory_table)
# Fetch the last 10 processes from available processes
print("----Processes----")
process_table = PrettyTable(['PID', 'PNAME', 'STATUS',
'CPU', 'NUM THREADS'])
for process in psutil.pids()[-10:]:
# While fetching the processes, some of the subprocesses may exit
# Hence we need to put this code in try-except block
try:
p = psutil.Process(process)
process_table.add_row([
str(process),
p.name(),
p.status(),
str(p.cpu_percent())+"%",
p.num_threads()
])
except Exception as e:
pass
print(process_table)
# Create a 1 second delay
time.sleep(1)
输出: