我选择这种方式来获取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 中的相同字符串。
答案 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
不是标准,只适用于某些发行版。