我如何检测Ubuntu版本?

时间:2013-10-30 21:55:11

标签: python linux ubuntu

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

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

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

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

4 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分: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

平台库应该更有用。

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

答案 2 :(得分:1)

您还可以阅读: / etc / lsb-release 或/ etc / debian_version作为文本文件

我使用gentoo系统,对我来说:

# cat /etc/lsb-release 
DISTRIB_ID="Gentoo"

答案 3 :(得分:0)

def getOsFullDesc():
    name = ''
    if isfile('/etc/lsb-release'):
        lines = open('/etc/lsb-release').read().split('\n')
        for line in lines:
            if line.startswith('DISTRIB_DESCRIPTION='):
                name = line.split('=')[1]
                if name[0]=='"' and name[-1]=='"':
                    return name[1:-1]
    if isfile('/suse/etc/SuSE-release'):
        return open('/suse/etc/SuSE-release').read().split('\n')[0]
    try:
        import platform
        return ' '.join(platform.dist()).strip().title()
        #return platform.platform().replace('-', ' ')
    except ImportError:
        pass
    if os.name=='posix':
        osType = os.getenv('OSTYPE')
        if osType!='':
            return osType
    ## sys.platform == 'linux2'
    return os.name