📜  获取程序列表 (1)

📅  最后修改于: 2023-12-03 15:11:53.097000             🧑  作者: Mango

获取程序列表

在编程中,有时候需要获取计算机上安装的程序列表。通过列表,可以实现很多功能,比如:

  • 根据程序名获取程序路径,再通过路径启动程序。
  • 根据程序名判断程序是否安装在计算机上。
  • 根据程序名获取程序的详细信息,比如版本号、厂商等。

下面介绍一些不同平台获取程序列表的方法。

Windows

在 Windows 上,可以使用 WMI(Windows Management Instrumentation)查询程序列表。

import wmi

c = wmi.WMI()
for process in c.Win32_Product():
    print(process.Caption)

此代码片段使用了 wmi 模块,需要先安装该模块:

pip install wmi
macOS

在 macOS 上,可以使用 system_profiler 命令获取程序列表。

import subprocess

output = subprocess.check_output(["system_profiler", "-json", "SPApplicationsDataType"])

返回的 output 是一个字节串,需要将其解码为字符串,然后使用 json 模块解析 JSON 格式。

import json

data = json.loads(output.decode())
for item in data[0]["_items"]:
    print(item["path"])
Linux

在 Linux 上,可以使用 dpkgrpm 或者 pacman 等包管理器来获取程序列表。以下代码以 apt 包管理器为例:

import subprocess

output = subprocess.check_output(["dpkg-query", "-f", "'${Package} ${Version} ${Architecture}\n'", "-W"])
for line in output.decode().split("\n"):
    if line:
        package, version, arch = line.split()
        print(package, version, arch)

注意上述代码需要使用 sudo 或者 root 权限才能执行。

或者,可以读取 /usr/share/applications/ 目录下的 .desktop 文件来获取程序列表。每个 .desktop 文件描述了一个程序的信息,比如名称、图标、启动命令等。

import os

for filename in os.listdir("/usr/share/applications"):
    name = None
    exec_command = None
    with open(os.path.join("/usr/share/applications", filename), "r") as f:
        for line in f:
            if line.startswith("Name="):
                name = line.strip()[5:]
            elif line.startswith("Exec="):
                exec_command = line.strip()[5:]
    if name and exec_command:
        print(name, exec_command)
总结

不同平台获取程序列表的方法各有异同,需要根据具体情况选择合适的方法。此外,还要注意权限、编码等问题。