ant*_*isk 6 python suse opensuse uname identification
我正在开发一个需要系统包管理器的脚本.我已经使用该os.uname()功能识别了Fedora,Gentoo和Arch Linux .
但是,(打开)SUSE uname结果与其他Linux Distros相同.我uname在维基百科上发现了许多发行版的结果.
有没有什么聪明的方法可以用Python识别(打开)SUSE?
如果分发遵循Linux Standard Base,则可以读取lsb_release -i的输出.
像这样的东西:
import os
try:
distro = os.popen('lsb_release -i').read().split(':')[1].strip()
except IndexError:
distro = None
Run Code Online (Sandbox Code Playgroud)
从顶部的评论:
我建议你直接解决实际问题.不是识别操作系统,而是识别可用的包管理器.
import os
def file_exists(fname):
try:
os.stat(fname)
return True
except OSError:
return False
if file_exists('/usr/bin/zypper'):
... # do the SUSE case
elif file_exists('/usr/bin/apt-get'):
... # do the Debian/Ubuntu case
elif file_exists('/usr/bin/yum'):
... # do the Red Hat case
else:
raise OSError, "cannot find a usable package manager"
Run Code Online (Sandbox Code Playgroud)
编辑:虽然这里的代码显示检测包管理器程序,但检测主程序包注册表本身可能更好.例如,在使用的Debian/Ubuntu系统上dpkg,将有一个/var/lib/dpkg包含数据包数据库的目录; 这是一个确定的标志,dpkg或者apt-get是适当的.我不知道SUSE和Red Hat的等效目录是什么,但是如果你支持那些你可以找到的.
apt-get已被移植到Red Hat系统,并通过一个名为alien你的程序可以rpm访问Debian系统,等等.检测包数据库本身是确定正在使用的包系统的最简单方法.
如果您检测到包管理器,那么您的代码将自动处理所有相关的发行版.如果您检测到dpkg数据库,您的代码将适用于Debian,Ubuntu,Linux Mint以及基于Debian的许多其他发行版.如果您检测到rpm数据库,您的代码将适用于Red Hat,Centos,Fedora,Mandriva以及基于RPM的所有其他发行版.