Linux发行版名称解析

时间:2010-05-03 08:23:50

标签: python regex linux

我选择这种方式来获取linux发行版名称:

ls /etc/*release

现在我必须解析它的名字:

/etc/<name>-release

def checkDistro():
    p = Popen('ls /etc/*release' , shell = True, stdout = PIPE)
    distroRelease = p.stdout.read()

    distroName = re.search( ur"\/etc\/(.*)\-release", distroRelease).group()
    print distroName

但这会打印 distroRelease 中的相同字符串。

5 个答案:

答案 0 :(得分:7)

另一种方法是使用内置方法platform.linux_distribution()(在Python 2.6 +中可用):

>>> import platform
>>> platform.linux_distribution()
('Red Hat Enterprise Linux Server', '5.1', 'Tikanga')

在旧版本的Python中,可以使用platform.dist()

>>> import platform
>>> platform.dist()
('redhat', '5.1', 'Tikanga')

答案 1 :(得分:5)

你需要.group(1),因为你想要第一个捕获组 - 没有参数,它默认为.group(0),这是整个匹配的文本。

答案 2 :(得分:3)

不鼓励解析ls输出。考虑使用glob():

#!/usr/bin/env python

import os
import glob

def check_distro():
    print os.path.basename(glob.glob('/etc/*-release')[0]).replace('-release', '')

if __name__ == '__main__':
    check_distro()

答案 3 :(得分:2)

使用.group(1)

答案 4 :(得分:1)

重点是什么? /etc/*release不是标准,只适用于某些发行版。