检测Linux发行版版本的Python模块

6 投票
4 回答
7512 浏览
提问于 2025-04-15 17:27

有没有现成的Python模块可以用来检测当前安装的Linux发行版和版本呢?

比如说:

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

我可以通过解析一些文件,比如/etc/redhat-release,自己写一个模块,但我想知道有没有现成的模块可以用?

谢谢,
伊凡

4 个回答

2

上面的回答在RHEL 5.x上不管用。最快的方法是在类似Red Hat的系统上查看/etc/redhat-release这个文件。每次你更新系统时,这个文件都会被更新,系统的小版本号升级时也会更新。

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

如果你把分开的部分去掉,它就只会给你一个字符串。虽然没有你问的模块,但我觉得这个方法简单又优雅,可能对你有帮助。

3

我写了一个叫做 distro 的包(现在被 pip 使用),目的是替代 distro.linux_distribution。这个包可以在很多不同的操作系统上使用,而这些系统在用 platform 时可能会返回一些奇怪的或者空的结果。

你可以在这里找到它:https://github.com/nir0s/distrodistro,在 pypi 上)

这个包提供了一个更复杂的接口,可以用来获取与操作系统相关的信息。

$ 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')

顺便提一下,platform.linux_distribution 会在 Python 3.7 中被移除。

19

去查一下平台模块的文档: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')

撰写回答