Pergunta

Existe um módulo Python existente que pode ser usado para detectar qual distro do Linux e qual versão da distro está instalada no momento.

Por exemplo:

  • Redhat Enterprise 5
  • Fedora 11
  • SUSE Enterprise 11
  • etc ....

Eu posso fazer meu próprio módulo analisando vários arquivos como /etc /redhat-lançamento, mas eu queria saber se já existe um módulo?

Saúde, Ivan

Foi útil?

Solução

Procure os documentos para o módulo da plataforma: http://docs.python.org/library/platform.html

Exemplo:

>>> platform.uname()
('Linux', 'localhost', '2.6.31.5-desktop-1mnb', '#1 SMP Fri Oct 23 00:05:22 EDT 2009', 'x86_64', 'AMD Athlon(tm) 64 X2 Dual Core Processor 3600+')
>>> platform.linux_distribution()
('Mandriva Linux', '2010.0', 'Official')

Outras dicas

A resposta acima não funciona no RHEL 5.x. A maneira mais rápida está em um sistema semelhante ao redhat é ler e observar o arquivo /etc /redhat-lançamento. Este arquivo é atualizado toda vez que você executa uma atualização e o sistema é atualizado por um número de liberação menor.

$ python
>>> open('/etc/redhat-release','r').read().split(' ')[6].split('.')
['5', '5']

Se você retirar as peças divididas, ele apenas lhe dará string. Nenhum módulo como você perguntou, mas achei que era curto e elegante o suficiente para que você ache útil.

Eu escrevi um pacote chamado distro (agora usado por pip) que visa substituir distro.linux_distribution. Funciona em muitas distribuições que podem retornar tuplas estranhas ou esvaziadas ao usar platform.

https://github.com/nir0s/distro (distro, em Pypi)

Ele fornece uma API muito mais elaborada para recuperar informações relacionadas à distribuição.

$ python
Python 2.7.12 (default, Nov  7 2016, 11:55:55) 
[GCC 6.2.1 20160830] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import distro
>>> distro.linux_distribution()
(u'Antergos Linux', '', u'ARCHCODE')

A propósito, platform.linux_distribution deve ser removido no Python 3.7.

Pode não ser a melhor maneira, mas usei o subprocesso para executar 'uname -v' e, em seguida, procurei o nome da distro na saída.

import subprocess
process = subprocess.Popen(['uname','-v'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]
distro = format(stdout).rstrip("\n")

if 'FreeBSD' in distro:
   print "It's FreeBSD"
elif 'Ubuntu' in distro:
   print "It's Ubuntu"
elif 'Darwin' in distro:
   print "It's a Mac"
else:
   print "Unknown distro"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top