Seite 1 von 1

stdout Binär-Modus, aber wie?

Verfasst: Samstag 14. Oktober 2006, 20:46
von vimico
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?

Verfasst: Samstag 14. Oktober 2006, 21:30
von BlackJack
Eigentlich ist es nicht besonders sauber potentielle Probleme zu ignorieren: Aber unter Unix/Linux macht das keinen Unterschied.

Re: stdout Binär-Modus, aber wie?

Verfasst: Samstag 14. Oktober 2006, 21:41
von gerold
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
:-)

Verfasst: Sonntag 15. Oktober 2006, 11:34
von vimico
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.

Verfasst: Sonntag 15. Oktober 2006, 11:49
von gerold
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
:-)