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