stdout Binär-Modus, aber wie?

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

stdout Binär-Modus, aber wie?

Beitragvon vimico » 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

Beitragvon 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

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

Beitragvon gerold » 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

Beitragvon vimico » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder