2015-08-29 18 views
5

İkili bir dosya açan ve okuyan bir kod var.Stdin'i ikili olarak oku

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

Şimdi stdin'den aynı şeyi okumaya ihtiyacım var. Ama ikili okumayı anlayamıyorum.

Hata yalnızca bayt dizeleri söylüyor.
Herhangi bir öneriniz var mı? Eğer stdin gelen ikili veri okumak istiyorsanız

cevap

8

Python 3,, onun buffer özellik kullanmak gerekir : Python 2, sys.stdin.read() günü

import sys 

data = sys.stdin.buffer.read() 

zaten bir bayt dize döndürür; buffer kullanmanıza gerek yoktur.

+1

Python 2 hakkında doğru değil. Varsayılan olarak metin modunda okur. Örneğin. Windows'da stdin'e verilen "a \ r \ nb" gibi bir dosya "a \ nb" olarak görünecektir. Çözümler için buraya bakın: http://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin –

+4

Windows'ta uygun çözüm için https://stackoverflow.com/a/38939320/239247 adresine bakın. –

+0

@EvgeniSergeev Gerçekten denedin mi? "$ printf" a \ r \ nb \ rc \ r "| python2.7 -c 'import sys; print (sys.stdin.readlines()) ''üretir [[a \ r \ n', 'b \ rc \ r']' –