stdout Binär-Modus, aber wie?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
vimico
User
Beiträge: 9
Registriert: Montag 27. März 2006, 22:27

Samstag 14. Oktober 2006, 20:46

Ich habe einen kleinen Server in Python geschrieben.

Dieser Server soll nicht die ganze Zeit als Daemon an einem Port lauschen, sondern von (x)inetd aufgerufen werden.

inetd setzt stdin und stdout so, dass das Programm damit mit dem Client kommunizieren kann.

Schwierig wird es, wenn etwas anderes als ASCII-Text ausgetauscht werden soll (angefangen von deutschen Umlauten) bis hin zu JPEG-Dateien, wie in meinem Fall.

Dazu müsste stdout in den Binär-Modus (wb) versetzt werden. Standardmäßig ist es nur im Text-Modus.

Gibt es hierzu einen offiziellen Weg?
BlackJack

Samstag 14. Oktober 2006, 21:30

Eigentlich ist es nicht besonders sauber potentielle Probleme zu ignorieren: Aber unter Unix/Linux macht das keinen Unterschied.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 14. Oktober 2006, 21:41

vimico hat geschrieben:Dazu müsste stdout in den Binär-Modus (wb) versetzt werden. Standardmäßig ist es nur im Text-Modus.
Hi vimico!

So viel ich weiß, nur unter Windows. Von Linux kenne ich dieses Verhalten nicht.

Hier ein paar Links die dir evt. weiter helfen, falls du "inetd" oder "xinetd" unter Windows verwendest:
- http://www.python-forum.de/post-30084.html#30084
- http://aspn.activestate.com/ASPN/Cookbo ... cipe/65443
- http://www.python.org/doc/faq/windows.h ... t-or-win95

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
vimico
User
Beiträge: 9
Registriert: Montag 27. März 2006, 22:27

Sonntag 15. Oktober 2006, 11:34

Danke für die Links... aber wie vermutet, habe ich das Problem unter Linux - das hätte ich vielleicht dabei schreiben sollen :-) - und da hilft mir der Verweis auf die Windows-Bibliothek wenig.

Zur Zeit umgehe ich das Problem, indem ich mit os.write direkt auf stdout schreibe. Das wird dann zwar nicht plattformübergreifend funktionieren, aber ich gebe die Hoffung auf eine Lösung nicht auf.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 15. Oktober 2006, 11:49

vimico hat geschrieben:Zur Zeit umgehe ich das Problem, indem ich mit os.write direkt auf stdout schreibe.
Hi vimico!

Wenn du mit ``print`` etwas nach STDOUT schreibst, dann wird dir ``print`` einen Zeilenumbruch anhängen. Willst du das nicht, dann arbeite mit ``sys.stdout.write()``. das ist kein "umgehen", sondern der richtige Weg.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten