Python 如何检查应用程序是否在运行
正在运行的程序被称为进程。进程可以是在当前操作系统上运行的应用程序,也可以是与操作系统相关的应用程序。如果一个应用程序与操作系统相关,它首先会创建一个进程来执行自己。
其他应用程序依赖操作系统服务来执行。大多数应用程序是操作系统服务以及维护操作系统、软件和硬件的后台应用程序。
我们在Python中有不同的方法来检查一个应用程序是否正在运行。让我们逐个详细介绍。
使用psutil.process_iter()函数
psutil是Python中的一个模块,它为用户提供了一个接口来检索运行中的进程和系统利用率的信息。它可以用于主要的操作系统,如Linux、Windows、macOS、Solaris和AIX等,以及API平台。
psutil模块的process_iter()函数帮助我们检索与运行中的进程相关的信息,如进程名称、进程ID、CPU使用率、内存使用率等。它还提供有关系统利用率的信息,如磁盘使用率、网络使用率等。
示例
在这个示例中,我们尝试找出名为“Chrome.exe”的进程是否正在我们的系统中运行。
import psutil
def check_if_process_running(process_name):
for process in psutil.process_iter(['name']):
if process.info['name'] == process_name:
return True
return False
check_if_process_running("Chrome.exe")
输出
False
示例
这是psutil模块的process_iter()函数的另一个示例,它提供了进程的详细信息。
import psutil
processes = psutil.process_iter()
for process in processes:
print(f"Process name: {process.name()} | PID: {process.pid}")
cpu_percent = psutil.cpu_percent()
print(f"CPU usage: {cpu_percent}%")
memory_usage = psutil.virtual_memory()
print(f"Total memory: {memory_usage.total / 1024 / 1024:.2f} MB")
print(f"Available memory: {memory_usage.available / 1024 / 1024:.2f} MB")
print(f"Memory usage: {memory_usage.percent}%")
输出
以下是process_iter()函数的输出结果,提供了有关该应用程序的全部信息。
Process name: chrome.exe | PID: 15964
Process name: chrome.exe | PID: 16876
CPU usage: 10.6%
Total memory: 12152.65 MB
Available memory: 5849.83 MB
Memory usage: 51.9%
使用subprocess模块
subprocess模块是另一种检查应用程序是否正在运行或停止的方法。使用subprocess模块,我们可以从当前的Python程序中启动一个新的应用程序。我们可以使用check_output()方法获取程序、命令的输出。
示例
在下面的示例中,我们试图使用check_output()函数验证一个应用程序是否打开:
import subprocess
def is_process_running(process_name):
cmd = 'tasklist /fi "imagename eq {}"'.format(process_name)
output = subprocess.check_output(cmd, shell=True).decode()
if process_name.lower() in output.lower():
return True
else:
return False
is_process_running("chrome.exe")
输出
True
使用wmi模块
Windows管理工具(Windows Management Instrumentation,简称WMI)是Windows操作系统中的一组工具,允许管理员管理远程和本地计算机。
在Python中,我们有wmi模块,它可以帮助我们检查应用程序是否正在运行。以下代码用于在Python环境中安装wmi。
pip install wmi
示例
在这个示例中,我们将应用程序名作为输入参数传递给wmi模块的WMI()函数,以检索具有进程ID的应用程序的状态。
import wmi
f = wmi.WMI()
for process in f.Win32_Process():
print(f"{process.ProcessId:>5} {process.Name}")
输出
以下是wmi模块的WMI()函数的输出结果。
0 System Idle Process
4 System
124 Registry
524 smss.exe
752 csrss.exe
868 csrss.exe
888 wininit.exe
940 services.exe
960 lsass.exe
320 winlogon.exe
980 svchost.exe
1048 fontdrvhost.exe
1056 fontdrvhost.exe
1144 WUDFHost.exe
1180 svchost.exe
1268 svchost.exe
1292 WUDFHost.exe
1396 svchost.exe
1404 svchost.exe
1412 svchost.exe
1528 svchost.exe
1640 dwm.exe
1660 svchost.exe