Python-Modul Linux Distro Version Detect
Frage
Gibt es ein bestehendes Python-Modul, das verwendet werden kann, zu erkennen, welche Distribution von Linux und welcher Version der Distribution zur Zeit installiert ist.
Zum Beispiel:
- RedHat Enterprise 5
- Fedora 11
- Suse Enterprise 11
- etc ....
Ich kann mein eigenes Modul machen durch Parsen verschiedene Dateien wie / etc / redhat-release, aber ich frage mich, ob ein Modul bereits vorhanden ist?
Cheers, Ivan
Lösung
Sie die Dokumentation für die Plattform-Modul Suchen: http://docs.python.org/library /platform.html
Beispiel:
>>> 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')
Andere Tipps
Die obige Antwort funktioniert nicht auf RHEL 5.x Der schnellste Weg ist auf einem RedHat-ähnliches System und Blick auf der / etc / redhat-release-Datei zu lesen. Diese Datei wird jedes Mal aktualisiert Sie ein Update und das System wird durch eine kleinere Versionsnummer aktualisiert.
$ python
>>> open('/etc/redhat-release','r').read().split(' ')[6].split('.')
['5', '5']
Wenn Sie die getrennten Teile herausnehmen es wird nur Sie String geben. Kein Modul wie Sie gefragt, aber ich dachte, es war kurz und elegant genug, dass Sie es nützlich finden können.
Ich habe ein Paket namens distro
geschrieben (jetzt durch pip
verwendet), die Ziele distro.linux_distribution
zu ersetzen. Es funktioniert auf vielen Distributionen, die seltsam oder leere Tupel könnte zurückkehren, wenn platform
verwendet wird.
https://github.com/nir0s/distro (distro
, auf pypi)
Es bietet eine viel aufwändigere API Verteilung bezogenen Informationen abgerufen werden.
$ 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')
By the way, platform.linux_distribution
ist in Python 3.7 entfernt werden.
Könnte nicht der beste Weg sein, aber ich verwenden subprocess ‚uname -v‘ auszuführen und dann suchte den Distro Namen in der Ausgabe.
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"