Разбор дистрибутивов Linux - PullRequest
0 голосов
/ 03 мая 2010

Я выбрал этот способ, чтобы получить название дистрибутива 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 ]

7 голосов
/ 03 мая 2010

Альтернативой является использование встроенного метода 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')
5 голосов
/ 03 мая 2010

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

3 голосов
/ 03 мая 2010

Анализ 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()
2 голосов
/ 03 мая 2010

Использование .group(1).

1 голос
/ 03 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...