Open Source im professionellen Einsatz
Linux-Magazin 06/2012
© Eric Isselée, 123RF

© Eric Isselée, 123RF

Python für Administratoren

Code mit Biss

,

Einsteigerfreundlich, schnell zu lernen und flexibel: Die Skriptsprache Python genießt trotz des vermeintlich gefährlichen Namens einen guten Ruf. Dank zahlreicher Module und einfacher Syntax reichen für Datei-Operationen, Ein- und Ausgaben und selbst fürs Monitoring eines Servers wenige Zeilen Code.

812

Und jetzt zu etwas völlig anderem: Eric Idle, John Cleese, Terry Gilliam, Terry Jones, Michael Palin und Graham Chapman, besser bekannt als "Monty Python", hätten sich 1969 sicher nicht träumen lassen, dass einmal ein Fan ihrer Sketche auf die Idee käme, eine Skriptsprache nach ihnen zu benennen. Entgegen der ersten Assoziation hat die Sprache Python eben nichts mit der Familie der Riesenschlangen zu tun, sondern verdankt ihren Namen Guido van Rossums Vorliebe für die englische Komikertruppe [1].

Ein Sinn für schwarzen, hintergründigen Humor sei aber keine Voraussetzung für die Arbeit mit Python, versichert das FAQ [2]. Im Gegenteil: Immer mehr Admins entdecken Python für sich, weil die Sprache schnell, einfach und klar erscheint und den Ruf genießt, den Einstieg [3] einfach zu machen. Ihre Fans schätzen es, dass die intuitive und simple Syntax fremden Code nachvollziehbar macht, selbst wenn über Jahre hinweg Kollegen "schnell mal was" geändert oder hinzugefügt haben. Vorteilhaft ist auch, dass alle Tools, die Entwickler üblicherweise erwarten (von regulären Ausdrücken bis zu String-Manipulation und Datei-Operationen), bereits vorhanden sind. Es gibt viele Bibliotheken, mit denen sich selbst komplexeste Aufgaben lösen lassen.

Hallo Welt

Schon auf den ersten Blick fällt die Klarheit und Kompaktheit des Python-Codes auf. Das liegt daran, dass die Sprache Wert auf korrekte Einrückungen (Tabulatoren) legt. Der simple Dreizeiler

for i in range(0, 10):
 print "Hallo"
 print "Welt"

gibt abwechselnd »Hallo« und »Welt« in zehn aufeinanderfolgenden Zeilen aus (Abbildung 1), wobei Python schon an der Einrückung erkennt, dass es die »print« -Befehle als innerhalb der »for« -Schleife zu interpretieren hat. Das spart lästige »do« und »done« -Einträge.

Abbildung 1: Drei Zeilen Python-Code reichen, um alternierend Hallo und Welt anzuzeigen.

Pythons Listen sind echte Listen, die Arrays lassen sich deutlich einfacher lesen, verändern und schreiben als andernorts. Der folgende Code gibt die in »fruit« spezifizierte Liste aus.

fruit = ['Apfel', 'Banane', 'Birne']
fruit.append('Orange')
for a in fruit:
 print a

Viele Aufgaben des Admin drehen sich in irgendeiner Form ums Reporting, also darum, Informationen aus einer Quelle abzufragen und zu verarbeiten, meist von einem Server im Netzwerk. Die High-Level-Bibliotheken, die Python dafür bringt, halten den Aufwand für den skriptenden Admin überschaubar. Wer beispielsweise seinen Apache Webserver überwachen will, installiert dort das »mod_status« -Apache-Modul [4] und programmiert sich sein Monitoringskript mit wenigen Zeilen Python selbst.

Apache-Monitor

Mod_status gibt seinen Zustandsbericht für den Indianer standardmäßig unter der URL »http://Apache-Server/server-status« aus, die dort präsentierten Informationen lassen sich mit wenigen Zeilen und der Hilfe der URL-Bibliothek »urllib« leicht abfragen:

import urllib
data = urllib.urlopen('http://localhost/server-status?auto')

Die beiden Zeilen reichen völlig aus, um einen HTTP-Netzwerkrequest zu erzeugen und die Ausgabe in der Variablen »data« zu speichern. Neben vielen anderen Informationen findet sich:

BusyWorkers: 1
IdleWorkers: 5

An dieser Stelle kommt Pythons String-Manipulation ins Spiel, denn für die Weiterverarbeitung des Statusberichts wäre der ganze Rest an Informationen eher hinderlich. Wer mehr als beispielsweise 20 Worker auf seinem Apachen laufen hat – das dürfte bei der Mehrheit der Server der Fall sein –, kommt nicht umhin, eine Schleife über die Daten laufen zu lassen. Die »readlines()« erledigt das zeilenweise, »strip()« entfernt die Zeilenumbrüche und »split()« trennt den Text in zwei Teile auf (vor und nach dem Doppelpunkt):

for line in data.readlines():
 key, val = line.strip().split(':', 1)

Die »1« weist »split()« an, immer nur am ersten Vorkommen des »:« zu trennen. Auch die Ausgabe bereitet dem Einsteiger kein Problem. Die Zeile:

print 'Die Anzahl der Workers ist {0}, abervielleicht sind es {1}'.format(1,2)

benutzt bereits ein paar der Methoden zur Ausgabeformatierung, die Python mitbringt. Ein Skript gäbe jetzt aus:

Die Anzahl der Workers ist 1 aber vielleicht sind es 2

Das Formatierungssystem von Python gestattet sowohl nummerierte als auch benannte Indexe, zumindest bei so genannten »dict« -Objekten (Dictionary, Wörterbuch). Diese Dictionarys sind Arrays, aber mit einem Key statt der Strings. Für das Beispiel ist das hilfreich, der Code zum Extrahieren der Statusmeldung lautet deshalb:

print 'Die Anzahl der Workers ist {BusyWorkers}'.format(**vars)

Dies übergibt das Dictionary »vars« , in dem der Key »BusyWorkers« hinterlegt ist. Listing 1 zeigt den gesamten Code für das Auslesen der Apache-Statusmeldung als Datei »apache-monitor.py« . Acht Zeilen Code erledigen einen HTTP-Request, das Parsen der erhaltenen Daten und die Aufbereitung der Ausgabe.

Listing 1

apache-monitor.py

01 #!/usr/bin/python
02
03 import urllib
04
05 data = urllib.urlopen('http://localhost/server-status?auto')
06
07 vars = {}
08 for line in data.readlines():
09     key, val = line.strip().split(':',1)
10     vars[key] = val
11
12 print vars
13 print 'The number of workers is {BusyWorkers}'.format(**vars)

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • I-Python: Interaktive Python-Umgebung in Version 2.0

    I-Python wird zwar von Wissenschaftlern entwickelt, soll aber auch andere Nutzergruppen anvisieren, die mit ihrem Rechner unterschiedlichste Aufgaben erledigen müssen - und das am liebsten in Python tun. Nun ist Version 2.0 verfügbar.

  • Pydev 3.0 mit Ipython-Unterstützung

    Pydev, eine freie Python-Entwicklungsumgebung auf Eclipse-Basis, steht in Version 3.0 zur Verfügung.

  • Entwickler-Tools

    Web-basierte Entwicklerwerkzeuge wie Bugzilla oder Github bieten ein Web-API, über das man sie mit eigenen Skripten abfragen und in bestimmten Grenzen auch fernsteuern kann.

  • Java mixen

    Bei Java interessiert nicht nur die Bohne, auch die reiche Vielfalt an Bibliotheken und Frameworks hält die Sprache wach. Und wem der Sinn nach einer Melange steht – Java integriert Fremdsprachen aller Geschmacksrichtungen.

  • Ipython erhält 1,15 Millionen US-Dollar Förderung

    Die US-amerikanische Stiftung Alfred P. Sloan Foundation fördert die Entwicklung der interaktiven Programmierumgebung Ipython mit 1,15 Millionen US-Dollar.

comments powered by Disqus

Ausgabe 08/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.