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 20 Netzwerkkommunikation
  Pfeil 20.1 Socket API
    Pfeil 20.1.1 Client/Server-Systeme
    Pfeil 20.1.2 UDP
    Pfeil 20.1.3 TCP
    Pfeil 20.1.4 Blockierende und nicht-blockierende Sockets
    Pfeil 20.1.5 Verwendung des Moduls
    Pfeil 20.1.6 Netzwerk-Byte-Order
    Pfeil 20.1.7 Multiplexende Server – select
    Pfeil 20.1.8 SocketServer
  Pfeil 20.2 Zugriff auf Ressourcen im Internet – urllib
    Pfeil 20.2.1 Verwendung des Moduls
  Pfeil 20.3 Einlesen einer URL – urlparse
  Pfeil 20.4 FTP – ftplib
  Pfeil 20.5 E-Mail
    Pfeil 20.5.1 SMTP – smtplib
    Pfeil 20.5.2 POP3 – poplib
    Pfeil 20.5.3 IMAP4 – imaplib
    Pfeil 20.5.4 Erstellen komplexer E-Mails – email
  Pfeil 20.6 Telnet – telnetlib
  Pfeil 20.7 XML-RPC
    Pfeil 20.7.1 Der Server
    Pfeil 20.7.2 Der Client
    Pfeil 20.7.3 Multicall
    Pfeil 20.7.4 Einschränkungen


Galileo Computing - Zum Seitenanfang

20.7 XML-RPC  Zur nächsten ÜberschriftZur vorigen Überschrift

Der Standard XML-RPC (Extensible Markup Language Remote Procedure Call) ermöglicht den entfernten Funktions- und Methodenaufruf über eine Netzwerkschnittstelle. Dabei können entfernte Funktionen aus Sicht des Programmierers aufgerufen werden, als gehörten sie zum lokalen Programm. Das Übertragen der Funktionsaufrufe und insbesondere der Parameter und des Rückgabewertes wird vollständig von der XML-RPC-Bibliothek übernommen, sodass der Programmierer die Funktionen tatsächlich nur aufzurufen braucht.

Neben XML-RPC existieren weitere mehr oder weniger standardisierte Verfahren zum entfernten Funktionsaufruf. Da aber XML-RPC auf zwei bereits bestehenden Standards, nämlich XML und HTTP, basiert und keine völlig neuen binären Protokolle einführt, ist es vergleichsweise einfach umzusetzen und daher in vielen Programmiersprachen verfügbar.

Da XML-RPC unabhängig von einer bestimmten Programmiersprache entwickelt wurde, ist es durchaus möglich, Client und Server in zwei verschiedenen Sprachen zu schreiben. Aus diesem Grund musste sich bei der XML-RPC-Spezifikation auf einen kleinsten gemeinsamen Nenner geeinigt werden, was die Eigenheiten bestimmter Programmiersprachen und besonders die verfügbaren Datentypen anbelangt. Sie werden feststellen, dass Sie bei einer Funktion mit einer XML-RPC-fähigen Schnittstelle bestimmte Einschränkungen zu beachten haben.

Im Folgenden werden wir uns zunächst damit beschäftigen, wie durch einen XML-RPC-Server bestimmte Funktionen nach außen hin aufrufbar werden. Danach widmen wir uns der Client-Seite und klären, wie solche Funktionen dann aufgerufen werden.


Galileo Computing - Zum Seitenanfang

20.7.1 Der Server  Zur nächsten ÜberschriftZur vorigen Überschrift

Zum Aufsetzen eines XML-RPC-Servers wird das Modul SimpleXMLRPCServer benötigt. Dieses Modul enthält im Wesentlichen die Klasse SimpleXMLRPCServer, die einen entsprechenden Server aufsetzt und Methoden zur Verwaltung desselben bereitstellt. Der Konstruktor der Klasse hat folgende Schnittstelle:

SimleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding]]]])

Der einzige zwingend erforderliche Parameter ist addr und spezifiziert die IP-Adresse und den Port, an die der Server gebunden wird. Die Angaben müssen in einem Tupel der Form (ip, port) übergeben werden, wobei die IP-Adresse ein String und die Portnummer eine ganze Zahl zwischen 0 und 65535 ist. Technisch wird der Parameter an die zugrunde liegende Socket-Instanz weitergereicht. Der Server kann sich nur an Adressen binden, die ihm auch zugeteilt sind. Wenn für ip im Tupel ein leerer String angegeben wird, wird der Server an alle dem PC zugeteilten Adressen gebunden, beispielsweise auch an 127.0.0.1 oder localhost.

Über den optionalen Parameter requestHandler kann eine Art Backend festgelegt werden. In den meisten Fällen reicht die Voreinstellung des Standard-Handlers SimpleXMLRPCRequestHandler. Die Aufgabe dieser Klasse ist es, eingehende Daten in einen Funktionsaufruf zurückzuverwandeln.

Über den Parameter logRequest kann festgelegt werden, ob einkommende Funktionsaufrufe protokolliert werden sollen oder nicht. Der Parameter ist mit True vorbelegt.

Der vierte Parameter, allow_none, ermöglicht es, sofern hier True übergeben wird, None in XML-RPC-Funktionen zu verwenden. Normalerweise verursacht die Verwendung von None eine Exception, da kein solcher Datentyp im XML-RPC-Standard vorgesehen ist. Da dies aber eine übliche Erweiterung des Standards darstellt, wird allow_none von vielen XML-RPC-Implementationen unterstützt.

Als letzter optionaler Parameter kann ein Encoding zur Datenübertragung festgelegt werden. Standardmäßig wird hier UTF-8 verwendet.

Für gewöhnlich reicht zur Instanziierung des XML-RPC-Servers folgender Aufruf des Konstruktors:

>>> from SimpleXMLRPCServer import SimpleXMLRPCServer as Server 
>>> srv = Server(("", 1337))

Die Klasse SimpleXMLRPCServer

Nachdem eine Instanz der Klasse SimpleXMLRPCServer erzeugt wurde, verfügt diese über Methoden, um beispielsweise Funktionen zum entfernten Aufruf zu registrieren. Die wichtigsten Methoden einer SimpleXMLRPCServer-Instanz sollen im Folgenden erläutert werden.

Dazu ist noch zu sagen, dass die Klasse SimpleXMLRPCServer von der Klasse SocketServer des gleichnamigen Moduls erbt. Das bedeutet insbesondere, dass ein XML-RPC-Server ebenfalls über die Methode serve_forever dazu instruiert wird, eine unbestimmte Anzahl von Anfragen zu beantworten. Näheres zum Modul SocketServer erfahren Sie in Abschnitt 20.1.8.

Im Folgenden sei s eine Instanz der Klasse SimpleXMLRPCServer.

s.register_function(function[, name])

Registriert das Funktionsobjekt function für einen RPC-Aufruf. Das bedeutet, dass ein zu diesem Server verbundener XML-RPC-Client die Funktion function über das Netzwerk aufrufen kann.

Optional kann der Funktion ein anderer Name gegeben werden, über den sie für den Client zu erreichen ist. Wenn ein solcher Name angegeben wird, kann dieser aus beliebigen Unicode-Zeichen bestehen, auch solchen, die in einem Python-Bezeichner eigentlich nicht erlaubt sind, beispielsweise ein Umlaut oder ein Punkt.

s.register_instance(instance[, allow_dotted_names])

Registriert die Instanz instance für den entfernten Zugriff. Wenn der verbundene Client eine Methode dieser Instanz aufruft, wird der Aufruf durch die spezielle Methode _dispatch geleitet. Die Methode muss folgendermaßen definiert sein:

def _dispatch(self, method, params): 
    pass

Bei jedem entfernten Aufruf einer Methode dieser Instanz wird _dispatch aufgerufen. Der Parameter method enthält den Namen der aufgerufenen Methode, und params enthält die dabei angegebenen Parameter. Wenn die Parameter entpackt und an eine Methode weitergereicht werden sollen, kann folgender Methodenaufruf verwendet werden:

self.meth(*params)

Eine konkrete Implementierung der Methode _dispatch, die die tatsächliche Methode der registrierten Instanz mit dem Namen method aufruft und die Parameter übergibt, sähe folgendermaßen aus:

def _dispatch(self, method, params): 
    try: 
        return getattr(self, method)(*params) 
    except (AttributeError, TypeError): 
        return None

Diese Funktion gibt sowohl dann None zurück, wenn keine Methode mit dem Namen method vorhanden ist, als auch dann, wenn die Methode mit der falschen Zahl oder einem unpassenden Parameter aufgerufen wird.

Wenn für den optionalen Parameter allow_dotted_names True übergeben wird, sind Punkte im entfernten Methodenaufruf möglich. Dadurch können auch Methoden von Attributen über das Netzwerk aufgerufen werden. Beachten Sie unbedingt, dass es damit einem Angreifer möglich gemacht wird, auf die globalen Variablen des Programms zuzugreifen und möglicherweise schädlichen Code auszuführen. Sie sollten allow_dotted_names nur innerhalb eines lokalen, vertrauenswürdigen Netzes auf True setzen, da sonst eine massive Sicherheitslücke geöffnet würde.

s.register_introspection_functions()

Registriert die Funktionen system.listMethods, system.methodHelp und system.methodSignature für den entfernten Zugriff. Diese Funktionen ermöglichen es einem verbundenen Client, eine Liste aller verfügbaren Funktionen und Informationen zu einzelnen dieser Funktionen zu bekommen.

Näheres zur Verwendung der Funktionen system.listMethods, system.method Help und system.methodSignature erfahren Sie in Abschnitt 20.7.2, »Der Client«.

s.register_multicall_functions()

Registriert die Funktion system.multicall für den entfernten Zugriff. Durch Aufruf der Funktion system.multicall kann der Client mehrere Methodenaufrufe bündeln, um so Traffic zu sparen. Auch die Rückgabewerte der Methodenaufrufe werden gebündelt zurückgegeben.

Näheres zur Verwendung der Funktion system.multicall erfahren Sie in Abschnitt 20.7.2, »Der Client«.

Beispiel

Nachdem die wichtigsten Funktionen der Klasse SimpleXMLRPCServer erläutert wurden, soll an dieser Stelle ein kleines Beispielprogramm entwickelt werden. Bei dem Programm handelt es sich um einen XML-RPC-Server, der zwei mathematische Funktionen (genauer gesagt die Berechnungsfunktionen für die Fakultät und das Quadrat einer ganzen Zahl) bereitstellt, die ein verbundener Client aufrufen kann.

from SimpleXMLRPCServer import SimpleXMLRPCServer as Server
def fak(n): """ Berechnet die Fakultaet der ganzen Zahl n. """ erg = 1 for i in xrange(2, n+1): erg *= i return erg
def quad(n): """ Berechnet das Quadrat der Zahl n. """ return n*n
srv = Server(("", 1337)) srv.register_function(fak) srv.register_function(quad) srv.serve_forever()

Zunächst werden die beiden Berechnungsfunktionen fak und quad für die Fakultät bzw. das Quadrat einer Zahl erstellt. Danach wird ein auf Port 1337 horchender XML-RPC-Server erzeugt und werden die soeben erstellten Funktionen registriert. Schlussendlich wird der Server durch Aufruf der Methode serve_forever gestartet und ist nun bereit, eingehende Verbindungsanfragen und Methodenaufrufe entgegenzunehmen und zu bearbeiten.

Der hier vorgestellte Server ist natürlich nur eine Hälfte des Beispielprogramms. Im nächsten Abschnitt werden wir besprechen, wie ein XML-RPC-Client auszusehen hat, und schließlich werden wir am Ende des folgenden Abschnitts einen Client entwickeln, der mit diesem Server kommunizieren kann.


Galileo Computing - Zum Seitenanfang

20.7.2 Der Client  Zur nächsten ÜberschriftZur vorigen Überschrift

Um einen XML-RPC-Client zu schreiben, wird das Modul xmlrpclib der Standardbibliothek verwendet. In diesem Modul ist vor allem die Klasse ServerProxy enthalten, über die die Kommunikation mit einem XML-RPC-Server abläuft. Hier sehen Sie zunächst die Schnittstelle des Konstruktors der Klasse ServerProxy:

ServerProxy(uri[, transport[, encoding[, verbose[, allow_none [, use_datetime]]]]])

Erzeugt eine Instanz der Klasse ServerProxy, die mit dem XML-RPC-Server verbunden ist, den die URI uri beschreibt.

An zweiter Stelle kann wie bei der Klasse SimpleXMLRPCServer ein Art Backend festgelegt werden. Die voreingestellten Klassen Transport für das HTTP- Protokoll und SafeTransport für das HTTPS-Protokoll dürften in den meisten Anwendungsfällen genügen.

Wenn für den vierten Parameter, verbose, True übergeben wird, gibt die Server Proxy-Instanz alle ausgehenden und ankommenden XML-Pakete auf dem Bildschirm aus. Dies kann besonders zur Fehlersuche hilfreich sein.

Wenn für den letzten Parameter use_datetime True übergeben wird, wird zur Repräsentation von Datums- und Zeitangaben statt der xmlrpclib-internen Klasse DateTime die Klasse datetime des gleichnamigen Moduls verwendet, die einen wesentlich größeren Funktionsumfang besitzt.

Auf die Parameter encoding und allow_none muss hier nicht weiter eingegangen werden, da sie dieselbe Bedeutung haben wie die gleichnamigen Parameter des Konstruktors der Klasse SimpleXMLRPCServer, der zu Beginn des letzten Kapitels besprochen wurde.

Die Klasse ServerProxy

Nach der Instanziierung der Klasse ServerProxy ist diese mit einem XML-RPC-Server verbunden. Das bedeutet insbesondere, dass alle bei diesem Server registrierten Funktionen wie Methoden der ServerProxy-Instanz aufgerufen und verwendet werden können. Es ist also keine weitere Sonderbehandlung nötig.

Zusätzlich beinhaltet eine ServerProxy-Instanz drei Methoden, die weitere Informationen über die verfügbaren entfernten Funktionen bereitstellen. Beachten Sie jedoch, dass der Server diese Methoden explizit zulassen muss. Dies geschieht durch Aufruf der Methoden register_introspection_functions der Simple XMLRPCServer-Instanz.

Im Folgenden sei s eine Instanz der Klasse ServerProxy.

s.system.listMethods()

Gibt die Namen aller beim XML-RPC-Server registrierten entfernten Funktionen in Form einer Liste von Strings zurück. Die Liste enthält keine dieser Systemmethoden.

s.system.methodSignature(name)

Diese Methode gibt Auskunft über die Schnittstelle der registrierten Funktion mit dem Funktionsnamen name. Die Schnittstellenbeschreibung ist ein String im Format:

"string, int, int, int"

wobei die erste Angabe dem Datentyp des Rückgabewertes und alle weiteren den Datentypen der Funktionsparameter entsprechen. Der XML-RPC-Standard sieht vor, dass zwei verschiedene Funktionen den gleichen Namen haben dürfen, sofern sie anhand ihrer Schnittstelle unterscheidbar sind. Aus diesem Grund wird von der Methode system.methodSignature nicht ein einzelner String, sondern eine Liste von Strings zurückgegeben.

Beachten Sie, dass der Methode system.methodSignature nur eine tiefere Bedeutung zukommt, wenn der XML-RPC-Server in einer Sprache geschrieben wurde, bei der Funktionsparameter jeweils an einen Datentyp gebunden werden. Solche Sprachen sind beispielsweise C, C++, C# oder Java. Sollten Sie system.method Signature bei einem XML-RPC-Server aufrufen, der in Python geschrieben wurde, so wird schlicht "signatures not supported" zurückgegeben.

s.system.methodHelp(name)

Gibt den Docstring der entfernten Funktion name zurück, wenn ein solcher existiert. Wenn kein Docstring gefunden werden konnte, wird ein leerer String zurückgegeben.

Beispiel

Damit wäre die Verwendung einer ServerProxy-Instanz beschrieben und eigentlich denkbar einfach. Das folgende Beispiel implementiert einen zu dem XML-RPC-Server des letzten Kapitels passenden Client.

import xmlrpclib
cli = xmlrpclib.ServerProxy("http://ip:1337") print cli.fak(5) print cli.quad(5)

Sie sehen, dass das Verbinden zu einem XML-RPC-Server und das Ausführen einer entfernten Funktion nur wenige Codezeilen benötigt und damit fast so einfach ist, als befände sich die Funktion im Client-Programm selbst.


Galileo Computing - Zum Seitenanfang

20.7.3 Multicall  Zur nächsten ÜberschriftZur vorigen Überschrift

Im Modul xmlrpc ist eine Klasse namens MultiCall enthalten. Diese Klasse ermöglicht es, mehrere Funktionsaufrufe gebündelt an den Server zu schicken, und instruiert diesen, die Rückgabewerte ebenfalls gebündelt zurückzusenden. Auf diese Weise lässt sich bei häufigen Funktionsaufrufen die Netzlast minimieren.

Die Verwendung der MultiCall-Klasse ist denkbar einfach und soll an folgendem Beispiel verdeutlicht werden. Das Beispiel benötigt einen laufenden Server, der die Funktionen fak und quad für den entfernten Zugriff bereitstellt, also genau so einen, wie wir ihn in Abschnitt 20.7.1 vorgestellt haben. Zusätzlich muss der Server den Einsatz von Multicall durch Aufruf der Methode register_multicall_functions erlauben.

import xmlrpclib
cli = xmlrpclib.ServerProxy("http://ip:1337")
mc = xmlrpclib.MultiCall(cli) for i in xrange(10): mc.fak(i) mc.quad(i)
for ergebnis in mc(): print ergebnis

Zunächst wird wie gehabt eine Verbindung zu dem XML-RPC-Server hergestellt. Danach wird eine Instanz der Klasse MultiCall erzeugt und dem Konstruktor die zuvor erzeugte ServerProxy-Instanz übergeben.

Ab jetzt läuft die gebündelte Kommunikation mit dem Server über die MultiCall-Instanz. Dazu können die entfernten Funktionen fak und quad aufgerufen werden, als wären es lokale Methoden der MultiCall-Instanz. Beachten Sie aber, dass diese Methodenaufrufe keinen sofortigen entfernten Funktionsaufruf zur Folge haben und somit auch zu dieser Zeit keinen Wert zurückgeben.

Im Beispiel werden fak und quad jeweils zehnmal mit einer fortlaufenden ganzen Zahl aufgerufen.

Durch Aufruf der MultiCall-Instanz (mc()) werden alle gepufferten entfernten Funktionsaufrufe zusammen an den Server geschickt. Als Ergebnis wird ein Iterator zurückgegeben, der über alle Rückgabewerte in der Reihenfolge des jeweiligen Funktionsaufrufes iteriert. Im Beispielprogramm nutzen wir den Iterator dazu, die Ergebnisse mittels print auszugeben.

Gerade bei wenigen Rückgabewerten ist es sinnvoll, diese direkt zu referenzieren.

wert1, wert2, wert3 = mc()

Hier wird davon ausgegangen, dass zuvor drei entfernte Funktionsaufrufe durchgeführt wurden und dementsprechend auch drei Rückgabewerte vorliegen.


Galileo Computing - Zum Seitenanfang

20.7.4 Einschränkungen  topZur vorigen Überschrift

Der XML-RPC-Standard ist nicht auf Python allein zugeschnitten, sondern es wurde bei der Ausarbeitung des Standards versucht, einen kleinsten gemeinsamen Nenner vieler Programmiersprachen zu finden, sodass beispielsweise Server und Client auch dann problemlos miteinander kommunizieren können, wenn sie in verschiedenen Programmiersprachen geschrieben wurden.

Aus diesem Grund bringt das Verwenden von XML-RPC einige Einschränkungen mit sich, was die komplexeren bzw. exotischeren Datentypen von Python betrifft. So gibt es im XML-RPC-Standard beispielsweise keine Repräsentation der Datentypen complex, set und frozenset. Auch None darf nur verwendet werden, wenn dies bei der Instanziierung der Server- bzw. Clientklasse explizit angegeben wurde. Das bedeutet natürlich nur, dass Instanzen dieser Datentypen nicht über die XML-RPC-Schnittstelle versendet werden dürfen. Programmintern können sie weiterhin verwendet werden. Sollten Sie versuchen, beispielsweise eine Instanz des Datentyps complex als Rückgabewert einer Funktion über die XML-RPC-Schnittstelle zu versenden, so wird eine xmlrpclib.Fault-Exception geworfen. Beachten Sie, dass es natürlich dennoch möglich ist, eine komplexe Zahl über eine XML-RPC-Schnittstelle zu schicken, indem Real- und Imaginärteil getrennt als jeweils ganze Zahl übermittelt werden.

Die folgende Tabelle listet alle im XML-RPC-Standard vorgesehenen Datentypen auf und beschreibt, wie sich diese in Python verwenden lassen.


Tabelle 20.10  Erlaubte Datentypen bei XML-RPC
XML-RPC Python Anmerkungen

Boolesche Werte

bool

Keine Anmerkungen

Ganze Zahlen

int

Keine Anmerkungen

Gleitkommazahlen

float

Keine Anmerkungen

Strings

str

Keine Anmerkungen

Arrays

list

In der Liste dürfen als Elemente nur XML-RPC-konforme Instanzen verwendet werden.

Strukturen

dict

Alle Schlüssel müssen Strings sein. Als Werte dürfen nur XML-RPC-konforme Instanzen verwendet werden.

Datum/Zeit

DateTime

Der spezielle Datentyp xmlrpclib.DateTime wird verwendet.

Binärdaten

Binary

Der spezielle Datentyp xmlrpclib.Binary wird verwendet.


Es ist möglich, Instanzen von selbst erstellten Klassen zu verwenden. In einem solchen Fall wird die Instanz in ein Dictionary, also eine Struktur, umgewandelt, in der die Namen der enthaltenen Attribute als Schlüssel eingetragen werden und die jeweils referenzierten Instanzen als Werte. Dies geschieht automatisch. Beachten Sie jedoch, dass das auf der Gegenseite ankommende Dictionary nicht automatisch wieder in eine Instanz der ursprünglichen Klasse umgewandelt wird.

Die letzten beiden Datentypen, die in der Tabelle aufgelistet sind, sind neu. Es handelt sich dabei um Datentypen, die im Modul xmlrpclib enthalten und speziell auf die Verwendung im Zusammenhang mit XML-RPC zugeschnitten sind. Die beiden erwähnten Datentypen DateTime und Binary sollen im Folgenden kurz erläutert werden.

Der Datentyp DateTime

Der Datentyp DateTime des Moduls xmlrpclib kann verwendet werden, um Datums- und Zeitangaben über eine XML-RPC-Schnittstelle zu versenden. Statt einer DateTime-Instanz kann, sofern der entsprechende Parameter bei der Instanziierung der ServerProxy-Instanz übergeben wurde, auch direkt eine Instanz der bekannten Datentypen datetime.date, datetime.time oder datetime.datetime verwendet werden.

Bei der Erzeugung einer Instanz des Datentyps DateTime kann entweder einer der Datentypen des Moduls datetime übergeben werden oder ein UNIX-Timestamp als ganze Zahl:

>>> import xmlrpclib 
>>> import datetime 
>>> xmlrpclib.DateTime(987654321) 
<DateTime '20010419T06:25:21' at 80fda4c> 
>>> xmlrpclib.DateTime(datetime.date(2007, 9, 7)) 
<DateTime '20070907T00:00:00' at 8108f8c>

Die erste DateTime-Instanz wurde aus einem UNIX-Timestamp erzeugt, während dem DateTime-Konstruktor bei der zweiten Instanziierung eine datetime.date-Instanz übergeben wurde.

Instanzen des Datentyps DateTime können Sie bedenkenlos in Form eines Rückgabewertes oder eines Parameters über eine XML-RPC-Schnittstelle senden.

Der Datentyp Binary

Der Datentyp Binary des Moduls xmlrpclib wird zum Versenden von Binärdaten über eine XML-RPC-Schnittstelle verwendet. Im Gegensatz zu Python macht der XML-RPC-Standard einen Unterschied zwischen ASCII-Strings und Binärdaten, was zur Folge hat, dass es eines zusätzlichen Datentyps für Binärdaten bedarf.

Bei der Instanziierung des Datentyps Binary wird ein String übergeben, der die binären Daten enthält. Diese können auf der Gegenseite über das Attribut data wieder ausgelesen werden:

>>> import xmlrpclib 
>>> b = xmlrpclib.Binary("\x00\x01\x02\x03") 
>>> b.data 
'\x00\x01\x02\x03'

Instanzen des Datentyps Binary können Sie bedenkenlos in Form eines Rückgabewertes oder eines Parameters über eine XML-RPC-Schnittstelle senden.



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