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"
如果分布遵循Linux Standard Base,则可以读取lsb_release -i的输出。在
像这样:
从顶部的评论来看:
我建议你直接解决实际问题。与其标识操作系统,不如确定可用的包管理器。在
编辑:虽然这里的代码显示了检测包管理器程序,但最好是检测主包注册表本身。例如,在使用}是合适的。我不知道SUSE和redhat等的等效目录是什么,但是如果您支持这些目录,您可以找到答案。在
dpkg
的Debian/Ubuntu系统上, 将有一个目录/var/lib/dpkg
保存包数据库;这是一个确定的标志,dpkg
或{apt-get
已经被移植到redhatsystems,通过一个名为alien
的程序,您可以在Debian系统上获得{如果您检测到包管理器,那么您的代码将自动在所有相关发行版上运行。如果您检测到
dpkg
数据库,您的代码将在Debian、Ubuntu、linuxmint和其他许多基于Debian的发行版上运行。如果您检测到rpm
数据库,您的代码将在Red Hat、Centos、Fedora、Mandriva以及所有其他基于RPM的发行版上运行。在这一点Python样板将打印出您的平台信息:
应该做这个工作。在
相关问题 更多 >
编程相关推荐