2015-08-29 9 views
5

Ich habe Code, der eine Datei aus Binär öffnet und liest.Read stdin als binär

with open (file, mode="rb") as myfile: 
    message_string=myfile.read() 
    myfile.close 

Ich muss jetzt das gleiche tun, das Lesen von Stdin. Aber ich kann nicht herausfinden, wie man binär liest.

Der Fehler sagt nur Byte-Strings.
Irgendwelche Vorschläge?

Antwort

8

In Python 3, wenn Sie binäre Daten von stdin lesen möchten, müssen Sie seine buffer Attribut verwenden:

import sys 

data = sys.stdin.buffer.read() 

Auf Python 2, sys.stdin.read() bereits gibt ein Byte-String; Sie müssen buffer nicht verwenden.

+1

Nicht wahr in Python 2. Es liest standardmäßig im Textmodus. Z.B. Unter Windows erscheint eine Datei wie "a \ r \ nb", die in stdin eingegeben wird, als "a \ nb". Hier finden Sie Lösungen: http://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin –

+4

Siehe https://Stackoverflow.com/a/38939320/239247 für die richtige Lösung unter Windows. –

+0

@EvgeniSergeev Hast du es tatsächlich versucht? '$ printf" a \ r \ nb \ rc \ r "| python2.7 -c 'import sys; print (sys.stdin.readlines()) ''produziert' [' a \ r \ n ',' b \ rc \ r '] ' –