2015-08-29 26 views
5

Ho codice che apre e legge un file da binario.Leggi stdin come binario

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

Ora ho bisogno di fare la stessa cosa leggendo da stdin. Ma non riesco a capire come leggere il binario.

L'errore indica solo le stringhe di byte.
Qualche suggerimento?

risposta

8

In Python 3, se si desidera leggere i dati binari da stdin, è necessario utilizzare il suo attributo buffer:

import sys 

data = sys.stdin.buffer.read() 

su Python 2, sys.stdin.read() restituisce già una stringa di byte; non è necessario utilizzare buffer.

+1

Non vero per Python 2. Si legge in modalità testo per impostazione predefinita. Per esempio. su Windows un file come "a \ r \ nb" inserito in stdin apparirà come "a \ nb". Vedi qui per le soluzioni: http://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin –

+4

Vedere https://stackoverflow.com/a/38939320/239247 per la soluzione corretta su Windows. –

+0

@EvgeniSergeev Lo hai provato in realtà? '$ printf" a \ r \ nb \ rc \ r "| python2.7 -c 'importa sys; print (sys.stdin.readlines()) ''produce' [' a \ r \ n ',' b \ rc \ r '] ' –