Python获取电脑打开了那些软件的方法有:使用psutil库、使用subprocess库、使用WMI。 其中,psutil库是最常用的一种方法,它可以获取系统的进程信息,并且可以跨平台使用。下面详细介绍如何通过psutil库来获取电脑上打开的软件。
一、使用psutil库
psutil(process and system utilities)是一个跨平台库,能够轻松实现系统监控、进程管理以及系统资源使用等功能。它提供了许多函数来获取系统的详细信息,包括当前运行的进程。
1、安装psutil库
首先,需要确保已经安装了psutil库。如果没有安装,可以使用以下命令进行安装:
pip install psutil
2、获取当前运行的进程
以下是一个示例代码,通过psutil库获取当前正在运行的所有进程:
import psutil
def list_opened_processes():
processes = []
for process in psutil.process_iter(['pid', 'name', 'username']):
processes.append(process.info)
return processes
if __name__ == "__main__":
processes = list_opened_processes()
for process in processes:
print(f"PID: {process['pid']}, Name: {process['name']}, User: {process['username']}")
在这个示例中,psutil.process_iter
函数会迭代系统中的所有进程,并返回一个包含进程ID、进程名称和用户名的字典列表。这个列表中的每个元素都是一个正在运行的进程。
3、获取更多的进程信息
psutil库还可以获取更多的进程信息,比如CPU使用率、内存使用率等。以下是一个示例代码,获取每个进程的CPU和内存使用率:
import psutil
def list_opened_processes():
processes = []
for process in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):
processes.append(process.info)
return processes
if __name__ == "__main__":
processes = list_opened_processes()
for process in processes:
print(f"PID: {process['pid']}, Name: {process['name']}, User: {process['username']}, CPU: {process['cpu_percent']}%, Memory: {process['memory_percent']}%")
在这个示例中,psutil.process_iter
函数会返回一个包含进程ID、进程名称、用户名、CPU使用率和内存使用率的字典列表。
二、使用subprocess库
subprocess库可以创建子进程来执行外部命令,并获取其输出。通过调用系统命令,可以获取当前运行的进程列表。
1、在Windows系统上使用tasklist命令
在Windows系统上,可以使用tasklist命令来获取当前运行的进程列表。以下是一个示例代码,通过subprocess库调用tasklist命令:
import subprocess
def list_opened_processes():
processes = []
result = subprocess.run(['tasklist'], stdout=subprocess.PIPE, text=True)
for line in result.stdout.splitlines()[3:]:
columns = line.split()
process = {
'name': columns[0],
'pid': columns[1],
'session_name': columns[2],
'session_num': columns[3],
'mem_usage': columns[4]
}
processes.append(process)
return processes
if __name__ == "__main__":
processes = list_opened_processes()
for process in processes:
print(f"Name: {process['name']}, PID: {process['pid']}, Session Name: {process['session_name']}, Session Num: {process['session_num']}, Memory Usage: {process['mem_usage']}")
在这个示例中,subprocess.run 函数会执行tasklist命令,并将其输出保存到result.stdout中。然后,通过解析输出,获取每个进程的信息。
2、在Linux系统上使用ps命令
在Linux系统上,可以使用ps命令来获取当前运行的进程列表。以下是一个示例代码,通过subprocess库调用ps命令:
import subprocess
def list_opened_processes():
processes = []
result = subprocess.run(['ps', 'aux'], stdout=subprocess.PIPE, text=True)
for line in result.stdout.splitlines()[1:]:
columns = line.split()
process = {
'user': columns[0],
'pid': columns[1],
'cpu': columns[2],
'mem': columns[3],
'vsz': columns[4],
'rss': columns[5],
'tty': columns[6],
'stat': columns[7],
'start': columns[8],
'time': columns[9],
'command': ' '.join(columns[10:])
}
processes.append(process)
return processes
if __name__ == "__main__":
processes = list_opened_processes()
for process in processes:
print(f"User: {process['user']}, PID: {process['pid']}, CPU: {process['cpu']}%, Memory: {process['mem']}%, Command: {process['command']}")
在这个示例中,subprocess.run 函数会执行ps aux命令,并将其输出保存到result.stdout中。然后,通过解析输出,获取每个进程的信息。
三、使用WMI(仅限Windows)
WMI(Windows Management Instrumentation)是Windows操作系统提供的一种管理基础结构,允许脚本和应用程序访问管理信息。通过WMI,可以获取详细的系统和进程信息。
1、安装WMI库
首先,需要确保已经安装了WMI库。如果没有安装,可以使用以下命令进行安装:
pip install WMI
2、获取当前运行的进程
以下是一个示例代码,通过WMI获取当前正在运行的所有进程:
import wmi
def list_opened_processes():
c = wmi.WMI()
processes = []
for process in c.Win32_Process():
processes.append({
'name': process.Name,
'pid': process.ProcessId,
'user': process.GetOwner()[2],
'cpu_time': process.KernelModeTime + process.UserModeTime,
'memory_usage': process.WorkingSetSize
})
return processes
if __name__ == "__main__":
processes = list_opened_processes()
for process in processes:
print(f"Name: {process['name']}, PID: {process['pid']}, User: {process['user']}, CPU Time: {process['cpu_time']}, Memory Usage: {process['memory_usage']}")
在这个示例中,WMI.WMI() 函数会创建一个WMI对象,Win32_Process() 函数会返回当前系统中的所有进程。然后,通过获取每个进程的详细信息,将其保存到列表中。
四、总结
通过psutil库、subprocess库和WMI,可以轻松获取系统中当前正在运行的进程信息。psutil库是最推荐的方法,因为它跨平台、功能强大且易于使用。subprocess库适用于调用系统命令,获取进程信息。WMI则是Windows系统中特有的一种方法,适用于获取更详细的管理信息。
在实际应用中,可以根据具体需求选择合适的方法来获取进程信息。通过这些方法,可以实现对系统资源的监控、进程管理等功能,提高系统的稳定性和安全性。
相关问答FAQs:
如何使用Python获取当前运行的程序列表?
要获取当前运行的程序列表,可以使用psutil
库。首先,确保安装了该库。使用psutil.process_iter()
方法,可以遍历所有进程并提取其名称和ID。以下是一个简单的示例代码:
import psutil
for process in psutil.process_iter(['pid', 'name']):
print(process.info)
这段代码将打印出所有正在运行的程序的进程ID和名称。
在Windows和Linux系统中,获取运行软件的方式有何不同?
在Windows和Linux中获取运行的软件列表的方式有所不同。在Windows上,使用pywin32
库可以直接与Windows API交互,获取更详细的信息。而在Linux上,使用ps
命令结合Python的subprocess
模块,可以获取当前运行的进程信息。示例代码如下:
import subprocess
result = subprocess.run(['ps', 'aux'], stdout=subprocess.PIPE)
print(result.stdout.decode())
这样可以在Linux系统上获取所有运行中的进程。
是否可以获取特定软件的运行状态?
确实可以。使用psutil
库,你可以通过进程名称来检查特定软件是否在运行。示例代码如下:
import psutil
def check_process_exists(process_name):
for process in psutil.process_iter(['name']):
if process.info['name'] == process_name:
return True
return False
if check_process_exists("your_program.exe"):
print("程序正在运行")
else:
print("程序未运行")
将your_program.exe
替换为你要检查的程序名称即可。这种方法可以帮助用户监控特定软件的状态。