如何使用Python获取正在运行的进程列表?
操作系统同时运行数百个任务/进程。作为Python开发者,这很重要,因为在处理占用大量内存的程序时,我们可能需要删除一些不重要的任务。本文将探讨如何使用Python获取正在运行的进程列表。
使用psutil模块
psutil模块是一个功能强大的跨平台库,用于在Python中进行系统监控和进程管理。它提供了一个方便且一致的API来访问系统相关信息,例如CPU使用率、内存利用率、磁盘使用率、网络统计数据等。作为跨平台库,相同的代码适用于所有操作系统。
示例
在下面的代码中,我们首先使用Python的import语句导入psutil库。接下来,我们使用了Python的process_iter方法。该方法返回系统中所有正在运行的进程。接下来,我们使用for循环迭代列表并打印所有正在运行的进程。
import psutil processes = psutil.process_iter() for process in processes: print(f"Process ID: {process.pid}, Name: {process.name()}")
输出
Process ID: 1, Name: systemd Process ID: 2, Name: kthreadd Process ID: 3, Name: rcu_gp Process ID: 4, Name: rcu_par_gp Process ID: 5, Name: slub_flushwq Process ID: 6, Name: netns ................................................. Process ID: 66499, Name: postgres Process ID: 66500, Name: postgres Process ID: 66501, Name: postgres Process ID: 66614, Name: kworker/6:0-events
使用Subprocess和Platform模块
Subprocess和platform模块是Python中处理操作系统的两个重要模块。subprocess允许编码人员与操作系统交互并执行外部命令和脚本。当在Python代码中运行系统命令或管理外部程序时,此模块特别有用。
另一方面,platform模块为我们提供了有关运行Python脚本的平台和操作系统的信 息。它提供方法和函数来检索有关平台名称、版本、架构和硬件信息的详细信息。当我们想要运行特定于平台的脚本时,此模块非常有用。
示例
在下面的代码中,我们首先使用import语句导入subprocess和platform模块。接下来,我们初始化一个名为command的空字符串。我们使用platform的system方法访问当前操作系统。然后,我们根据当前操作系统更新command字符串的值。接下来,我们使用subprocess的check_output方法获取系统信息。我们传递command参数来告知方法当前操作系统。
import subprocess import platform command = "" if platform.system() == "Windows": command = "tasklist" elif platform.system() == "Linux": command = "ps aux" elif platform.system() == "Darwin": command = "ps aux" output = subprocess.check_output(command, shell=True, text=True) print(output)
输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 168556 13420 ? Ss 09:37 0:01 /sbin/init splash root 2 0.0 0.0 0 0 ? S 09:37 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 09:37 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 09:37 0:00 [rcu_par_gp] root 5 0.0 0.0 0 0 ? I< 09:37 0:00 [slub_flushwq] root 6 0.0 0.0 0 0 ? I< 09:37 0:00 [netns] ............................................................................................... handle=0,i,13555718610975125658,12212836532179255023,262144 asifr 66779 0.0 0.0 2888 960 ? S 11:07 0:00 /bin/sh -c ps aux asifr 66780 0.0 0.0 21324 3548 ? R 11:07 0:00 ps aux
使用wmi模块
WMI(Windows Management Instrumentation)是一个Python库,仅用于与基于Windows的系统交互。它提供了一个Python接口来访问和操作WMI数据,允许您检索有关硬件、软件、进程等的 信息。使用WMI模块,您可以连接到本地或远程Windows计算机上的WMI服务,并查询可用的WMI类及其属性。这使您可以收集各种系统信息,例如CPU使用率、内存使用率、磁盘空间、网络配置和已安装的软件。
示例
在下面的代码中,我们首先导入wmi模块。接下来,我们使用WMI方法创建了一个对象。我们将对象命名为wmi_obj。接下来,我们使用Win32_Process方法获取系统中所有正在运行的进程列表。请注意,该代码仅适用于Windows 32位机器。接下来,我们迭代列表并打印结果。
import wmi wmi_obj = wmi.WMI() processes = wmi_obj.Win32_Process() for process in processes: print(f"Process ID: {process.ProcessId}, Name: {process.Name}")
输出
Process ID: 0, Name: System Idle Process Process ID: 4, Name: System Process ID: 76, Name: Registry Process ID: 244, Name: smss.exe Process ID: 328, Name: csrss.exe Process ID: 408, Name: wininit.exe Process ID: 444, Name: csrss.exe Process ID: 484, Name: services.exe Process ID: 496, Name: lsass.exe Process ID: 504, Name: lsm.exe Process ID: 596, Name: svchost.exe ...
结论
在本文中,我们了解了如何使用Python获取进程列表。我们已经看到Python允许使用跨平台和特定于平台的库来实现相同的目的。psutil、platform等是跨平台的,可以在任何系统上运行,但像wmi这样的库只能在Windows系统上运行。