
Python获取电脑打开的软件的方法包括:使用第三方库psutil、调用操作系统命令、使用Windows API和基于窗口标题的检测。其中,psutil是最常用的方法,因为它是跨平台的,易于使用且功能强大。下面详细介绍如何在Python中获取电脑当前打开的软件。
一、PSUTIL库的使用
安装和导入psutil
psutil 是一个跨平台库,旨在获取系统信息和进程信息。我们首先需要安装这个库:
pip install psutil
安装完成后,我们可以通过以下代码导入并使用它来获取当前运行的所有进程:
import psutil
获取所有进程的信息
for proc in psutil.process_iter(['pid', 'name']):
try:
print(f"PID: {proc.info['pid']} - Name: {proc.info['name']}")
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
获取详细的进程信息
除了获取进程的名称和PID,psutil 还可以获取更多详细的信息,比如启动时间、CPU使用率、内存使用情况等:
for proc in psutil.process_iter(['pid', 'name', 'username', 'create_time', 'cpu_percent', 'memory_info']):
try:
info = proc.info
print(f"PID: {info['pid']}, Name: {info['name']}, User: {info['username']}, "
f"Started at: {info['create_time']}, CPU: {info['cpu_percent']}%, "
f"Memory: {info['memory_info'].rss / (1024 * 1024):.2f} MB")
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
二、调用操作系统命令
Windows平台
在Windows平台上,我们可以使用 subprocess 模块来调用操作系统的 tasklist 命令来获取正在运行的进程:
import subprocess
调用 tasklist 命令
output = subprocess.check_output("tasklist", shell=True).decode()
输出结果
print(output)
macOS和Linux平台
在macOS和Linux平台上,可以使用 ps 命令来获取进程列表:
import subprocess
调用 ps 命令
output = subprocess.check_output(["ps", "-e"]).decode()
输出结果
print(output)
三、使用Windows API
Windows API 提供了更多强大的功能,可以更详细地获取和控制进程信息。我们可以使用 ctypes 模块来调用这些API。
获取正在运行的进程列表
以下是一个示例,展示如何使用Windows API获取正在运行的进程列表:
import ctypes
import ctypes.wintypes
定义需要的结构和常量
TH32CS_SNAPPROCESS = 0x00000002
class PROCESSENTRY32(ctypes.Structure):
_fields_ = [("dwSize", ctypes.wintypes.DWORD),
("cntUsage", ctypes.wintypes.DWORD),
("th32ProcessID", ctypes.wintypes.DWORD),
("th32DefaultHeapID", ctypes.POINTER(ctypes.wintypes.ULONG)),
("th32ModuleID", ctypes.wintypes.DWORD),
("cntThreads", ctypes.wintypes.DWORD),
("th32ParentProcessID", ctypes.wintypes.DWORD),
("pcPriClassBase", ctypes.c_long),
("dwFlags", ctypes.wintypes.DWORD),
("szExeFile", ctypes.c_char * 260)]
加载库
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
CreateToolhelp32Snapshot = kernel32.CreateToolhelp32Snapshot
Process32First = kernel32.Process32First
Process32Next = kernel32.Process32Next
获取进程快照
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
pe32 = PROCESSENTRY32()
pe32.dwSize = ctypes.sizeof(PROCESSENTRY32)
遍历进程列表
if Process32First(hProcessSnap, ctypes.byref(pe32)):
while True:
print(f"PID: {pe32.th32ProcessID}, Name: {pe32.szExeFile.decode()}")
if not Process32Next(hProcessSnap, ctypes.byref(pe32)):
break
四、基于窗口标题的检测
有些情况下,我们可能只对有窗口的应用程序感兴趣。此时,我们可以使用 pygetwindow 库来获取当前打开的窗口:
安装和使用pygetwindow
首先安装 pygetwindow:
pip install pygetwindow
然后使用它来获取当前打开的窗口:
import pygetwindow as gw
获取所有窗口的标题
windows = gw.getAllTitles()
输出窗口标题
for window in windows:
print(window)
结论
通过以上方法,我们可以在Python中轻松获取当前电脑上打开的软件和进程。psutil 是一个非常强大的库,适用于大多数情况,而调用操作系统命令和使用Windows API则提供了更多的灵活性和控制。最后,基于窗口标题的检测方法非常适合只对有窗口的应用程序进行操作的场景。无论选择哪种方法,都可以根据具体需求进行定制和扩展。
相关问答FAQs:
1. 电脑上的Python如何获取当前打开的软件列表?
要获取电脑上当前打开的软件列表,可以使用Python中的psutil库。通过psutil.process_iter()函数可以获取当前正在运行的进程列表,然后通过遍历进程列表获取每个进程的名称。
import psutil
def get_running_apps():
apps = []
for proc in psutil.process_iter():
try:
app_name = proc.name()
apps.append(app_name)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return apps
running_apps = get_running_apps()
print(running_apps)
2. 如何判断某个软件是否在电脑上打开?
要判断某个软件是否在电脑上打开,可以在获取当前打开的软件列表后,使用Python的in关键字进行判断。
import psutil
def is_app_running(app_name):
for proc in psutil.process_iter():
try:
if app_name.lower() in proc.name().lower():
return True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return False
app_name = "Chrome"
if is_app_running(app_name):
print(f"{app_name} is running.")
else:
print(f"{app_name} is not running.")
3. 如何获取电脑上每个打开软件的详细信息?
要获取电脑上每个打开软件的详细信息,可以使用psutil库中的pid属性获取进程的ID,然后使用psutil.Process(pid)来获取进程的详细信息。
import psutil
def get_running_apps_info():
apps_info = []
for proc in psutil.process_iter():
try:
app_info = {}
app_info['name'] = proc.name()
app_info['pid'] = proc.pid
app_info['status'] = proc.status()
app_info['cpu_usage'] = proc.cpu_percent()
app_info['memory_usage'] = proc.memory_percent()
apps_info.append(app_info)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return apps_info
running_apps_info = get_running_apps_info()
for app_info in running_apps_info:
print(app_info)
以上是关于如何获取电脑上打开的软件的几个常见问题的解答,希望对您有帮助!
文章包含AI辅助创作,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/1274938