2013-05-16 24 views
5

adında bir test dosyası == a.py == içinde stdoutyazma bayt python3.3

import os 

if __name__ == '__main__': 
    for x in range(0,1000): 
     try: 
      os.sys.stdout.buffer.write(b"hello\r\n") 
      os.sys.stdout.buffer.flush() 
     except OSError: 
      pass 

tek başına çalıştırıldığında It is ok. Ancak şu durumda sorun var:

  1. Çalıştır python a.py | 'Kodlama = 'cp936' w '= mod' < _io.TextIOWrapper adı =' de OSError (22 'Geçersiz değişken') daha fazla
  2. CTRL + C

Sonra durum OSError var çıkmak için > yok sayılır

OS.sys'ü zaten os.sys.stdout.buffer işlemlerinin çevresinde yakalarım ancak hala yanlıştır.

os.sys.stdout.buffer.flush dosyasını kullanmazsam, bir hata mesajı yoktur. Sadece print() kullanırsam, her şey yolunda.

Stdout'a bayt nasıl yazılır?

Windows 7 64 bit ve Python 3.3.0 32 bit kullanıyorum.

+3

olası yinelenen [? Piton 3'te stdout içinde ikili veri yazmak için nasıl] (http://stackoverflow.com/questions/908331/how-to-write-binary-data -in-stdout-in-piton-3) –

cevap

9

Stdout'u farklı modda yeniden açmak için os.fdopen kullanabilirsiniz. Stdout için dosya numarasını sys.stdout.fileno() ile alabilirsiniz.

Örnek:

>>> fp = os.fdopen(sys.stdout.fileno(), 'wb') 
>>> fp.write(b'Hello, world') 
12 
>>> sys.stdout.mode 
'w' 
>>> fp.mode 
'wb' 
>>> fp.flush() 
Hello, world>>> 
ait