通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python如何获取电脑打开了那些软件

python如何获取电脑打开了那些软件

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替换为你要检查的程序名称即可。这种方法可以帮助用户监控特定软件的状态。

相关文章