Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 17 Schnittstelle zum Betriebssystem
  Pfeil 17.1 Funktionen des Betriebssystems – os
    Pfeil 17.1.1 Zugriff auf den eigenen Prozess und andere Prozesse
    Pfeil 17.1.2 Zugriff auf das Dateisystem
  Pfeil 17.2 Umgang mit Pfaden – os.path
  Pfeil 17.3 Zugriff auf die Laufzeitumgebung – sys
    Pfeil 17.3.1 Konstanten
    Pfeil 17.3.2 Exceptions
    Pfeil 17.3.3 Hooks
    Pfeil 17.3.4 Sonstige Funktionen
  Pfeil 17.4 Informationen über das System – platform
    Pfeil 17.4.1 Funktionen
  Pfeil 17.5 Kommandozeilenparameter – optparse
    Pfeil 17.5.1 Taschenrechner – ein einfaches Beispiel
    Pfeil 17.5.2 Weitere Verwendungsmöglichkeiten
  Pfeil 17.6 Kopieren von Instanzen – copy
  Pfeil 17.7 Zugriff auf das Dateisystem – shutil
  Pfeil 17.8 Das Programmende – atexit


Galileo Computing - Zum Seitenanfang

17.3 Zugriff auf die Laufzeitumgebung – sys  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul sys der Standardbibliothek stellt Konstanten und Funktionen zur Verfügung, die sich auf den Python-Interpreter selbst beziehen oder eng mit diesem zusammenhängen. So kann über das Modul sys beispielsweise die Versionsnummer des Interpreters oder des Betriebssystems abgefragt werden. Das Modul stellt dem Programmierer eine Reihe von Informationen zur Verfügung, die mitunter sehr nützlich sein können. Es lohnt sich also, sich einen Überblick über die Funktionalität von sys zu verschaffen, allein schon, um einen Begriff davon zu bekommen, an welche Informationen Sie durch dieses Modul gelangen können.

Um die Beispiele des Kapitels ausführen zu können, muss zuvor das Modul sys eingebunden werden:

>>> import sys

Galileo Computing - Zum Seitenanfang

17.3.1 Konstanten  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul sys enthält eine ganze Reihe von Konstanten, die mitunter sehr nützliche Informationen bereitstellen. Die wichtigsten dieser Konstanten sollen im Folgenden erklärt werden.

sys.argv

Die Liste sys.argv enthält die Kommandozeilenparameter, mit denen das Python-Programm aufgerufen wurde. sys.argv[0] ist der Name des Programms selbst. Im interaktiven Modus hat sys.argv die Länge 0. Bei dem Programmaufruf

programm.py -bla 0 -blubb abc

würde sys.argv folgende Liste referenzieren:

['programm.py', '-bla', '0', '-blubb', 'abc']

Verwenden Sie das Modul optparse, wenn Sie Kommandozeilenparameter komfortabel verwalten möchten.

sys.byteorder

Diese Konstante spezifiziert die Byte-Order des aktuellen Systems. Der Wert ist entweder "big" für ein Big-Endian-System, bei dem das signifikanteste Byte an erster Stelle gespeichert wird, oder "little" für ein Little-Endian-System, bei dem das am wenigsten signifikante Byte zuerst gespeichert wird.

sys.executable

Dies ist ein String, der den vollen Pfad zur ausführbaren Datei des Python-Interpreters angibt.

>>> sys.executable 
'C:\\Python25\\pythonw.exe'
sys.hexversion

Diese Konstante enthält die Versionsnummer des Python-Interpreters als ganze Zahl. Wenn sie durch Aufruf der Built-in Function hex als Hexadezimalzahl geschrieben wird, wird der Aufbau der Zahl deutlich:

>>> hex(sys.hexversion) 
'0x20501f0'

In diesem Fall wurde Python 2.5.1 verwendet. Es ist garantiert, dass hexversion mit jeder Python-Version immer größer wird, dass man also mit den Operatoren < und > testen kann, ob die verwendete Version des Interpreters aktueller ist als eine bestimmte, die für die Ausführung des Programms mindestens vorausgesetzt wird.

sys.maxint

Diese Konstante enthält den größtmöglichen Wert, der in einer Instanz des Datentyps int gespeichert werden kann. Dieser Wert hängt von dem zugrunde liegenden System ab, ist aber mindestens 231  –1 (32-Bit). Der kleinstmögliche Wert entspricht -sys.maxint -1.

sys.maxunicode

Diese Konstante enthält den größtmöglichen Zeichencode, den ein Unicode-Zeichen haben kann. Dieser Wert hängt davon ab, welche Unicode-Darstellung intern verwendet wird.

sys.modules

Das Dictionary sys.modules enthält die Namen aller momentan eingebundenen Module als Schlüssel und die dazugehörigen Namespaces als jeweiligen Wert.

sys.path

Die Liste sys.path enthält eine Reihe von Pfadangaben, die beim Einbinden eines Moduls der Reihe nach vom Interpreter durchsucht werden. Das zuerst gefundene Modul mit dem in einer import-Anweisung angegebenen Namen wird eingebunden.

Es steht dem Programmierer frei, die Liste so zu modifizieren, dass das Einbinden eines Moduls nach seinen Wünschen erfolgt.

>>> import sys 
>>> sys.path 
['C:Python25\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python25.zip', 
'C:\\Python25\\DLLs', 
'C:\\Python25\\lib', 
'C:\\Python25\\lib\\plat-win', 
'C:Python25\\lib\\lib-tk', 
'C:\\Python25', 
'C:\\Python25\\lib\\site-packages']
sys.platform

Dieser String enthält eine Kennung des zugrunde liegenden Betriebssystems. Der Wert ist beispielsweise "win32" für Windows oder "linux2" für Linux.

Diese Kennung könnte beispielsweise dazu verwendet werden, um plattformspezifische Pfade an sys.path anzuhängen.

sys.stdin, sys.stdout, sys.stderr

Dies sind die Dateiobjekte, die für Ein- und Ausgaben des Interpreters verwendet werden. Dabei steht sys.stdin für standard input und entspricht dem Dateiobjekt, aus dem die Benutzereingaben beim Aufruf von input oder raw_input gelesen werden. In das Dateiobjekt sys.stdout (standard output) werden alle Ausgaben des Python-Programms geschrieben, während Ausgaben des Interpreters, beispielsweise Tracebacks, in sys.stderr (standard error) geschrieben werden.

Das Überschreiben dieser vorbelegten Dateiobjekte mit eigenen Dateiobjekten erlaubt es, Ein- und Ausgaben auf andere Streams, beispielsweise in eine Datei, umzulenken. Beachten Sie dabei, dass sys.stdin stets ein vollwertiges Dateiobjekt sein muss, während für sys.stdout und sys.stderr eine Instanz reicht, die eine Methode write implementiert.

Die ursprünglichen Streams von sys.stdin, sys.stdout und sys.stderr werden in sys.__stdin__, sys.__stdout__ und sys.__stderr__ gespeichert, sodass sie jederzeit wiederhergestellt werden können.

sys.version

Ein String, der die Versionsnummer des Python-Interpreters und einige weitere Informationen, wie beispielsweise das Datum seiner Kompilierung und den verwendeten Compiler, enthält.

>>> sys.version 
'2.5.1 (r251:54863, Apr 19 2007, 11:03:39) \n[GCC 4.1.2]'

Beachten Sie, dass es bei sys.version im Gegensatz zu sys.hexversion nicht garantiert ist, dass die Versionsnummern mit den Operatoren > und < sinnvoll miteinander verglichen werden können.

sys.version_info

Ein Tupel, das die einzelnen Komponenten der Versionsnummer des Interpreters enthält.

>>> sys.version_info 
(2, 5, 1, 'final', 0)

Galileo Computing - Zum Seitenanfang

17.3.2 Exceptions  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul sys enthält einige Funktionen, die speziell dazu gedacht sind, Zugriff auf geworfene Exceptions zu erhalten oder anderweitig mit Exceptions zu arbeiten.

Näheres dazu, wie Sie das in diesem Kapitel angesprochene Traceback-Objekt verwenden können, erfahren Sie in Abschnitt 21.6.

sys.exc_info()

Diese Funktion ermöglicht es, Zugriff auf eine momentan abgefangene Exception zu erlangen. Momentan abgefangen bedeutet, dass sich der Kontrollfluss innerhalb eines except-Zweiges einer try/except-Anweisung befinden muss, damit diese Funktion einen sinnvollen Wert zurückgibt.

Die Funktion exc_info gibt ein Tupel zurück, das drei Werte enthält: den Exception-Typ, die geworfene Instanz des Exception-Typs und das entsprechende Traceback-Objekt.

Beachten Sie, dass die Informationen über die aktuell abgefangene Exception nicht erhalten bleiben, sondern nur innerhalb des except-Zweiges verwendbar sind. Sollten Sie Informationen über die zuletzt geworfene Exception außerhalb eines except-Zweiges benötigen, sollten Sie last_type, last_value oder last_traceback verwenden.

sys.exc_clear()

Löscht die Informationen über die aktuell abgefangene Exception. Dies geschieht am Ende eines except-Zweiges automatisch.

sys.last_type, sys.last_value, sys.last_traceback

Erlauben es, Zugriff auf die zuletzt geworfene Exception zu erlangen. Die drei Informationen entsprechen denen, die von sys.exc_info zurückgegeben werden.

Beachten Sie, dass diese Konstanten auch außerhalb eines except-Zweiges Gültigkeit haben, da sie stets Informationen über die zuletzt geworfene Exception enthalten.

sys.tracebacklimit

Diese ganze Zahl kennzeichnet die maximale Tiefe, bis zu der ein Traceback Informationen über die Funktionshierarchie liefern soll. Initial ist dieser Wert auf 1000 gesetzt. Ein Wert von 0 veranlasst, dass ein Traceback nur aus dem Exception-Typ und der Fehlermeldung besteht.


Galileo Computing - Zum Seitenanfang

17.3.3 Hooks  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul sys erlaubt den Zugriff auf sogenannte Hooks (dt. Haken). Das sind Funktionen, die bei gewissen Aktionen des Python-Interpreters aufgerufen werden. Durch Überschreiben dieser Funktionen kann sich der Programmierer in den Interpreter »einhaken« und so die Funktionsweise des Interpreters verändern.

sys.displayhook(value)

Diese Funktion wird immer dann aufgerufen, wenn das Ergebnis eines Ausdrucks im interaktiven Modus ausgegeben werden soll, also beispielsweise in der folgenden Situation:

>>> 42 
42

Durch Überschreiben von sys.displayhook mit einer eigenen Funktion lässt sich dieses Verhalten ändern. Im folgenden Beispiel möchten wir erreichen, dass bei einem eingegebenen Ausdruck nicht das Ergebnis selbst, sondern die Identität des Ausdrucks ausgegeben wird:

>>> def f(value): 
...     print id(value) 
... 
>>> sys.displayhook = f 
>>> 42 
134536524 
>>> 97 + 32 
134537456 
>>> "Hallo Welt" 
3083420560

Beachten Sie, dass sys.displayhook nicht aufgerufen wird, wenn eine Ausgabe mittels print getätigt wird: [Das wäre auch sehr ungünstig, da wir im Hook selbst ja eine print-Ausgabe tätigen. Würde eine print-Ausgabe wieder den Hook aufrufen, befänden wir uns in einer endlosen Rekursion. ]

>>> print "Hallo Welt" 
Hallo Welt

Das ursprüngliche Funktionsobjekt von sys.displayhook können Sie über sys.__displayhook__ erreichen und somit die ursprüngliche Funktionsweise wiederherstellen:

>>> sys.displayhook = sys.__displayhook__
sys.excepthook(type, value, traceback)

Diese Funktion wird immer dann aufgerufen, wenn eine nicht abgefangene Exception auftritt. Sie ist dafür verantwortlich, den Traceback auszugeben. Durch Überschreiben dieser Funktion mit einem eigenen Funktionsobjekt lässt sich zum Beispiel die Ausgabe eines Tracebacks verändern.

Die drei Parameter der Funktion entsprechen denen, die von sys.exc_info zurückgegeben werden, und enthalten Informationen über die Exception.

Im folgenden Beispiel möchten wir einen Hook einrichten, damit bei einer nicht abgefangenen Exception kein dröger Traceback mehr, sondern ein hämischer Kommentar ausgegeben wird:

>>> def f(type, value, traceback): 
...     print "gnahahaha: '%s'" % value 
... 
>>> sys.excepthook = f 
>>> abc 
gnahahaha: 'name 'abc' is not defined'

Das ursprüngliche Funktionsobjekt von sys.excepthook können Sie über sys.__excepthook__ erreichen und somit die ursprüngliche Funktionsweise wiederherstellen.


Galileo Computing - Zum Seitenanfang

17.3.4 Sonstige Funktionen  topZur vorigen Überschrift

Neben den bereits besprochenen Konstanten sowie den exception- bzw. hook-bezogenen Funktionen stellt das Modul sys einige weitere Funktionen bereit, um an Informationen über den Interpreter oder das Betriebssystem zu gelangen oder mit dem System zu interagieren.

sys.exit([arg])

Wirft eine SystemExit-Exception. Diese hat, sofern sie nicht abgefangen wird, zur Folge, dass das Programm ohne Traceback-Ausgabe beendet wird.

Als optionaler Parameter arg kann, wenn es sich um eine ganze Zahl handelt, ein Exit Code ans Betriebssystem übergeben werden. Ein Exit Code von 0 steht im Allgemeinen für ein erfolgreiches Beenden des Programms, und ein Exit Code ungleich 0 steht für einen Programmabbruch aufgrund eines Fehlers.

Wenn eine andere Instanz für arg übergeben wurde, beispielsweise ein String, wird diese nach sys.stderr ausgegeben, bevor das Programm mit dem Exit Code 0 beendet wird.

sys.getrefcount(object)

Gibt den aktuellen Reference Count für die übergebene Instanz object zurück. Der Reference Count ist eine ganze Zahl und entspricht der Anzahl von Referenzen, die auf eine Instanz bestehen. Wenn eine Instanz einen Reference Count von 0 hat, wird sie vom Garbage Collector entsorgt.

Beachten Sie, dass es dem Interpreter bei Instanzen unveränderlicher Datentypen frei steht, eine neue Instanz zu erzeugen oder eine bereits bestehende neu zu referenzieren. Aus diesem Grund kann es vorkommen, dass zum Beispiel Instanzen ganzer Zahlen einen hohen Reference Count haben.

sys.getrecursionlimit(), setrecursionlimit(limit)

Mit diesen Funktionen kann die maximale Rekursionstiefe ausgelesen oder verändert werden. Die maximale Rekursionstiefe ist mit 1000 vorbelegt und bricht endlos rekursive Funktionsaufrufe ab, bevor diese zu einem Speicherüberlauf führen können.

sys.getwindowsversion()

Erlaubt es, die Details über die Version des aktuell verwendeten Windows-Betriebssystems auszulesen. Die Funktion gibt ein Tupel zurück, dessen erste drei Elemente ganze Zahlen sind und die Versionsnummer beschreiben. Das vierte Element ist ebenfalls eine ganze Zahl und beschreibt die verwendete Plattform. Folgende Werte sind hier gültig:


Tabelle 17.3  Windows-Plattformen
Plattform Bedeutung

0

Windows 3.1 (32-Bit)

1

Windows 95/98/ME

2

Windows NT/2000/XP/2003/Vista

3

Windows CE


Das letzte Element des Tupels ist ein String, der weiterführende Informationen enthält.

>>> sys.getwindowsversion() 
(5, 1, 2600, 2, 'Service Pack 2')

Unter anderen Betriebssystemen als Microsoft Windows ist die Funktion sys.getwindowsversion nicht verfügbar.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo