如何使用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系統上執行。

更新於:2023年7月18日

6000+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告