用于检测Linux发行版的Python模块

时间:2009-12-29 22:22:45

标签: python redhat suse

是否有现有的python模块可用于检测Linux的哪个发行版以及当前安装的发行版版本。

例如:

  • RedHat Enterprise 5
  • Fedora 11
  • Suse Enterprise 11
  • 等...

我可以通过解析各种文件来创建自己的模块,比如/ etc / redhat-release,但我想知道模块是否已经存在?

干杯, 伊万

4 个答案:

答案 0 :(得分:15)

查找平台模块的文档:http://docs.python.org/library/platform.html

示例:

>>> platform.uname()
('Linux', 'localhost', '2.6.31.5-desktop-1mnb', '#1 SMP Fri Oct 23 00:05:22 EDT 2009', 'x86_64', 'AMD Athlon(tm) 64 X2 Dual Core Processor 3600+')
>>> platform.linux_distribution()
('Mandriva Linux', '2010.0', 'Official')

答案 1 :(得分:2)

上述答案不适用于RHEL 5.x.最快的方法是在类似redhat的系统上阅读并查看/ etc / redhat-release文件。每次运行更新时都会更新此文件,并且系统会通过次要版本号进行升级。

$ python
>>> open('/etc/redhat-release','r').read().split(' ')[6].split('.')
['5', '5']

如果你把分开的部分取出来,它只会给你一个字符串。没有像你这样的模块,但我觉得它很短而且很优雅,你可能觉得它很有用。

答案 2 :(得分:1)

我写了一个名为distro的包(现在由pip使用),旨在取代distro.linux_distribution。它适用于许多使用platform时可能返回奇怪或空元组的发行版。

https://github.com/nir0s/distrodistro,关于pypi)

它提供了更精细的API来检索与分发相关的信息。

$ python
Python 2.7.12 (default, Nov  7 2016, 11:55:55) 
[GCC 6.2.1 20160830] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import distro
>>> distro.linux_distribution()
(u'Antergos Linux', '', u'ARCHCODE')

顺便说一句,在Python 3.7中删除platform.linux_distribution

答案 3 :(得分:0)

可能不是最好的方法,但我使用子进程执行' uname -v'然后在输出中查找发行版名称。

import subprocess
process = subprocess.Popen(['uname','-v'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]
distro = format(stdout).rstrip("\n")

if 'FreeBSD' in distro:
   print "It's FreeBSD"
elif 'Ubuntu' in distro:
   print "It's Ubuntu"
elif 'Darwin' in distro:
   print "It's a Mac"
else:
   print "Unknown distro"