我如何检测Ubuntu版本?

Chi*_*chi 6 python linux ubuntu

我目前正在编写一个更改某些网络配置文件的Python应用程序.该应用程序需要在Ubuntu 10.04到13.10上运行.问题是,NetworkManager在不同的版本上以不同的方式被破坏(尽管它们似乎最终在13.04+中修复了它),这导致我的应用程序不兼容.

我已经找出每个版本的问题并为它们开发了解决方法,我只是不确定最好的方法是检测用户运行的是哪个版本的Ubuntu.

到目前为止,我提出的最佳解决方案是解析输出lsb_release -a,但这似乎是一个相当脆弱的解决方案,可能会失败的Ubuntu派生的发行版,如Mint甚至可能与一些"官方"变体(Kubuntu,Xubuntu等).

有没有一种很好的方法来检测给定Linux发行版的基本发行版和版本,以便我可以根据我的应用程序在该版本上做出的选择?

Bil*_*nch 9

您可以做的一件事就是简化代码,实际上是了解lsb_release是如何编写的.它实际上是用python编写的.

所以我们可以将大部分代码减少到这个:

>>> import lsb_release
>>> lsb_release.get_lsb_information()
{'RELEASE': '10.04', 'CODENAME': 'lucid', 'ID': 'Ubuntu', 'DESCRIPTION': 'Ubuntu 10.04.4 LTS'}
Run Code Online (Sandbox Code Playgroud)

这不一定有助于所有子ubuntu发行版,但我不知道有任何内置表可以帮助你.


Dyl*_*nce 7

最好的选择是使用操作系统和平台库.

import os
import platform

print os.name #returns os name in simple form

platform.system() #returns the base system, in your case Linux
platform.release() #returns release version
Run Code Online (Sandbox Code Playgroud)

平台库应该是更有用的.

编辑:Rob对这篇文章的评论也突出了更具体的platform.linux_distribution(),我想我会在这里指出.

  • 更不用说`platform.linux_distribution()`了 (6认同)
  • 自 Python 3.5 起,“platform.linux_distribution()”和“platform.distro()”均已弃用,并且在 Python 3.7 后不可用。 (5认同)