用于检索Linux PC上已安装软件的Python脚本

用于检索Linux PC上已安装软件的Python脚本,python,Python,是否有一种pythonic方法可以检索Linux系统上安装的软件名称/版本 或者对于不同的平台,如Ubuntu、Fedora、CentOS等,必须有不同的方法?不,没有任何“pythonic”方法可以做到这一点。您仍然可以使用已安装的软件包管理器的工具来搜索软件包 我创建了一些代码来完成这些工作。它目前只支持dpkg(在Debian和Ubuntu中使用)和homebrew(在MacOSX中使用),但添加其他包管理器很容易 重新导入 导入子流程 包管理器={ #“命令”:“测试包是否存在”-com

是否有一种pythonic方法可以检索Linux系统上安装的软件名称/版本


或者对于不同的平台,如Ubuntu、Fedora、CentOS等,必须有不同的方法?

不,没有任何“pythonic”方法可以做到这一点。您仍然可以使用已安装的软件包管理器的工具来搜索软件包

我创建了一些代码来完成这些工作。它目前只支持dpkg(在Debian和Ubuntu中使用)和homebrew(在MacOSX中使用),但添加其他包管理器很容易

重新导入
导入子流程
包管理器={
#“命令”:“测试包是否存在”-commnad
“dpkg”:“dpkg-s?”,
“brew”:“brew ls?”
#只需在此处添加新的包管理器
}
def find_package_manager():
对于包_MANAGERS.keys()中的pm:
如果子流程调用([“which”,pm],stdout=subprocess.PIPE,stderr=subprocess.PIPE)==0:
返回下午
引发操作错误(“找不到包管理器”)
def是否已安装(名称):
return subprocess.call(PACKAGE_MANAGERS[find_PACKAGE_manager()])。replace(“?”,name)+“>/dev/null 2>&1”,shell=True)==0
def检测软件包版本(名称):
如果未安装软件包(名称):
引发操作错误(“找不到包”)
尝试:
x=子进程。检查输出(名称+“--version>/dev/null 2>&1”,shell=True)
除了subprocess.CalledProcessError之外:
通过
其他:
a=re.findall(“\\d+\\.\\d+\.\\d+”,x)
如果len(a)>0:
返回[0]
b=re.findall(“\\d+\\.\\d+”,x)
如果len(b)>0:
返回b[0]
已安装打印包(“python”)
打印检测包版本(“python”)
对不起,有点麻烦


因为几乎所有的程序都提供了
--version
开关,所以我用它来检测包的版本。您可能需要使用package manager的工具来完成此操作。

shutil。python2中不存在该工具。