2010-05-03 3 views
-1

Я выбрал этот путь, чтобы получить имя дистрибутива: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.

+4

Вместо этого вы можете использовать базовый инструмент Linux Standard Lsb_release. Запустите его с помощью '--help' и/или' -a', чтобы понять, как это работает. –

+1

Как вы уже знаете, '/ etc/* release' не будет работать для всех дистрибутивов. Но см. Http://serverfault.com/questions/3331/how-do-i-find-out-what-version-of-linux-is-running/3334#3334 – Jonik

ответ

5

Вам нужен .group(1), потому что вы хотите, чтобы первая группа захвата - без аргументов, по умолчанию она равна .group(0), которая представляет собой весь согласованный текст.

1

В чем смысл? /etc/*release не является стандартом, он будет работать только на некоторых дистрибутивах.

+1

Я это знаю. Этот скрипт будет работать только под дистрибутивами, который поддерживает этот файл. – Ockonal

+0

Тогда это будет бесполезно. –

+4

@ Lo'oris: Это не значит, что вы судите, не так ли? Если ОП решит создать сценарий таким образом, несмотря на ограничение, то он, скорее всего, будет ему полезен. – Jonik

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() 
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') 
Смежные вопросы