在Python中识别操作系统是否是(开放的)SUSE?

2024-10-01 02:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个脚本,它需要系统的包管理器。我已经使用os.uname()函数识别了Fedora、Gentoo和ArchLinux。在

然而,(open)SUSEuname的结果与其他Linux发行版相同。我在Wikipedia上找到了许多发行版的uname结果。在

有没有什么聪明的方法可以用Python识别(open)SUSE?在


Tags: 方法函数脚本管理器oslinux系统open
3条回答

如果分布遵循Linux Standard Base,则可以读取lsb_release -i的输出。在

像这样:

import os

try:
    distro = os.popen('lsb_release -i').read().split(':')[1].strip()
except IndexError:
    distro = None

从顶部的评论来看:

  • 我需要知道操作系统是否是(开放的)SUSE,以便使用正确的包安装程序(zypper)。如果是DEBIAN(例如),我将使用apt get。。。在

我建议你直接解决实际问题。与其标识操作系统,不如确定可用的包管理器。在

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"

编辑:虽然这里的代码显示了检测包管理器程序,但最好是检测主包注册表本身。例如,在使用dpkg的Debian/Ubuntu系统上, 将有一个目录/var/lib/dpkg保存包数据库;这是一个确定的标志,dpkg或{}是合适的。我不知道SUSE和redhat等的等效目录是什么,但是如果您支持这些目录,您可以找到答案。在

apt-get已经被移植到redhatsystems,通过一个名为alien的程序,您可以在Debian系统上获得{},等等。检测包数据库本身是找出正在使用的包系统的最简单的方法。在

如果您检测到包管理器,那么您的代码将自动在所有相关发行版上运行。如果您检测到dpkg数据库,您的代码将在Debian、Ubuntu、linuxmint和其他许多基于Debian的发行版上运行。如果您检测到rpm数据库,您的代码将在Red Hat、Centos、Fedora、Mandriva以及所有其他基于RPM的发行版上运行。在

这一点Python样板将打印出您的平台信息:

import platform  

print platform.linux_distribution()  
('openSUSE ', '11.4', 'x86_64')  

应该做这个工作。在

相关问题 更多 >