A Byte of Python

Das sys-Modul

Das sys-Modul enthält systemspezifische Funktionalität. Wir haben bereits gesehen, dass die Liste sys.argv die Kommandozeilenparameter enthält.

Kommandozeilenparameter

Beispiel 14.1. Der Gebrauch von sys.argv (cat.py)

				
#!/usr/bin/python

import sys

def liesdatei(dateiname):
	'''Gib eine Datei auf der Standardausgabe aus.'''
	f = file(dateiname)
	while True:
		zeile = f.readline()
		if len(zeile) == 0:
			break
		print zeile, # beachten Sie das Komma
	f.close()

# das Skript beginnt hier
if len(sys.argv) < 2:
	print 'Es wurden keine Parameter uebergeben.'
	sys.exit()

if sys.argv[1].startswith('--'):
	option = sys.argv[1][2:]
	# hole sys.argv[1], aber ohne die ersten beiden Zeichen
	if option == 'version':
		print 'Version 1.2'
	elif option == 'hilfe':
		print '''\
Dieses Programm gibt Dateien auf der Standardausgabe aus.
Es kann eine beliebige Anzahl von Dateien angegeben werden.
Als Optionen koennen angegeben werden:
  --version : Gibt die Versionsnummer aus
  --hilfe   : Gibt diese Hilfe aus'''
	else:
		print 'Unbekannte Option.'
	sys.exit()
else:
	for dateiname in sys.argv[1:]:
		liesdatei(dateiname)
				
				

Ausgabe

				
$ python cat.py
Es wurden keine Parameter uebergeben.

$ python cat.py --hilfe
Dieses Programm gibt Dateien auf der Standardausgabe aus.
Es kann eine beliebige Anzahl von Dateien angegeben werden.
Als Optionen koennen angegeben werden:
  --version : Gibt die Versionsnummer aus
  --hilfe   : Gibt diese Hilfe aus

$ python cat.py --version
Version 1.2

$ python cat.py --unsinn
Unbekannte Option.

$ python cat.py gedicht.txt
Programmieren mit Elan
und die Arbeit wird getan,
willst du Spass haben daran:
        Nimm Python!
				
				

So funktioniert es

Dieses Programm versucht, den cat-Befehl zu imitieren, der Linux/Unix-Benutzern wohlbekannt ist (er entspricht type unter DOS/Windows). Sie geben einfach den Namen einiger Textdateien an, und der Befehl gibt sie auf der Standardausgabe aus.

Wenn ein Python-Programm gestartet ist, d.h. nicht im interaktiven Modus, dann gibt es stets mindestens einen Eintrag in der Liste sys.argv, nämlich den Namen des gerade laufenden Programms, der als sys.argv[0] verfügbar ist, da Python von 0 anfängt zu zählen. Weitere eventuell vorhandene Kommandozeilenparameter folgen auf diesen Eintrag.

Um das Programm benutzerfreundlich zu gestalten, haben wir bestimmte Optionen vorgesehen, die der Benutzer angeben kann, um mehr über das Programm zu lernen. Wir benutzen den ersten Parameter, um zu prüfen, ob unserem Programm irgendwelche Optionen übergeben worden sind. Wenn die Option --version benutzt wird, dann wird die Versionsnummer des Programms ausgegeben. Auf ähnliche Weise geben wir ein wenig Erklärung über das Programm aus, wenn die Option --help angegeben wird. Wir benutzen die Funktion sys.exit, um das laufende Programm zu beenden. Wie immer erhalten Sie mit help(sys.exit) weitere Einzelheiten hierzu.

Wenn keine Optionen angegeben wurden und dem Programm Dateinamen übergeben werden, dann gibt es einfach jede Zeile jeder Datei aus, eine nach der anderen, in der Reihenfolge, wie sie auf der Kommandozeile angegeben wurde.

Nebenbei bemerkt ist der Name cat eine Abkürzung für concatenate, was 'verketten' bedeutet und genau das bezeichnet, was dieses Programm tut - es kann eine Datei ausgeben, oder zwei oder mehr Dateien in der Ausgabe einander anfügen und so miteinander verketten.

Weiteres aus sys

Der String sys.version liefert Informationen über die Python-Version, die Sie installiert haben. Mit dem Tupel sys.version_info kann man auf einfache Weise Fallunterscheidungen für verschiedene Python-Versionen durchführen.

			
[swaroop@localhost code]$ python
>>> import sys
>>> sys.version
'2.3.4 (#1, Oct 26 2004, 16:42:40) \n[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)]'
>>> sys.version_info
(2, 3, 4, 'final', 0)
			
			

Für erfahrene Programmierer sind weitere interessante Dinge im sys-Modul zu finden, wie sys.stdin, sys.stdout und sys.stderr, die den Datenströmen Standardeingabe, Standardausgabe bzw. Standardfehlerausgabe Ihres Programms entsprechen.