Um Bytes direkt auszugeben, kannst Du nicht "print" verwenden, sondern musst auf "sys.stdout.buffer.write()" zurückgreifen. "print()" arbeitet ebenso wie "sys.stdout" mit Zeichenketten, nicht mit Bytes.
Wie kann das sein? Bzw. wie bekomm ich die Ausgabe von Python 2 unter Python 3 hin? Hätte ja eigentlich gedacht, dass Versionswechsel mehr Vor- als Nachteile bringen
@omnidan: Die gezeigten Beispiele liefern – wie nicht anders zu erwarten – abgesehen von einem Zeilenumbruch am Ende identische Ausgaben. Zeige also bitte den Quelltext, mit dem Du tatsächlich unterschiedliche Ausgaben erhältst, inklusive der Art, wie Du den Quelltext aufrufst.
Ansonsten bleibt es eben bei den üblichen Allgemeinplätzen: Du musst Dir im Klaren darüber sein, mit welchem Typ Du gerade arbeitest. Zeichenketten sind etwas anders als Bytefolgen und müssen demnach auch anders verarbeitet werden. In Python 2 ist dieser Unterschied dank der impliziten Konvertierungen nur versteckt, beachtet werden muss er trotzdem, ansonsten funktionieren die resultierenden Programme nur auf gut Glück. Es ist also ein Vorteil, dass Python 3 streng zwischen diesen Typen trennt, denn das vermeidet viele Fehler, auch wenn es am Anfang etwas umständlich ist.
Hmmm....also ich sehe in den von mir vorgestellten Beispielen schon deutliche Unterschiede:
Meine dargestellte Python-2-Ausgabe unter OS X enthält genau die von mir gewünschten Bytes, während Python 3 unter Windows eine vielzahl von Füllzeichen, Zeilenumbrüchen etc. einfügt.
Aufgerufen werden sie genau wie dargestellt. Um das Ergebnis hier zeigen zu können hab ich die Ausgabe allerdings in eine Datei umgeleitet, diese mit dem Hex-Editor geöffnet und das Ergebnis hier gepostet:
Wie gesagt: Identische Ausgabe. Deswegen ja auch meine Frage nach Deinem exakten Vorgehen, denn offensichtlich gibt es etwas, was aus den von Dir zusammen gestellten Beispielen nicht hervorgeht.
Vielen lieben Dank schonmal, dass ihr euch soviel Mühe macht!
Also: Unter OS X/Linux habt ihr recht! Es kommt auch mit meinem Python 3-Skript die identische Ausgabe raus. Unter Windows XP (Powershell 2.0, Python 3.2b2) bekomme ich jedoch oben dargestellte Ausgabe Obwohl der Aufruf in der Powershell exakt gleich ist:
Am besten bastels du ein minimales Beispiel zusammen, welchen den Fehler reproduzierst und postest den Code hier. Sonst endet es wahrscheinlich in einer Rumraterei, was nicht besonders produktiv ist.
Wenn ich das Skript unter der normalen Windows-Konsole aufrufe bekomme ich auch das richtige Ergebnis! Das Problem scheint ausschließlich in der Verwendung von PowerShell zu liegen - das gibts doch nicht! Vielen Dank für eure Hilfe - werde jetzt mal ein Powershell-Forum quälen