📅  最后修改于: 2023-12-03 15:11:53.097000             🧑  作者: Mango
在编程中,有时候需要获取计算机上安装的程序列表。通过列表,可以实现很多功能,比如:
下面介绍一些不同平台获取程序列表的方法。
在 Windows 上,可以使用 WMI(Windows Management Instrumentation)查询程序列表。
import wmi
c = wmi.WMI()
for process in c.Win32_Product():
print(process.Caption)
此代码片段使用了 wmi
模块,需要先安装该模块:
pip install wmi
在 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 上,可以使用 dpkg
、rpm
或者 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)
不同平台获取程序列表的方法各有异同,需要根据具体情况选择合适的方法。此外,还要注意权限、编码等问题。