2014-11-21 12 views
17

Python 2 obsługuje wejścia/wyjścia niebuforowane tekstu.Dlaczego tekstowe we/wy muszą być buforowane w pythonie 3?

To samo podejście nie działa w pythonie 3. Dlaczego odblokowano niebuforowane operacje we/wy tekstów?

> import sys 
> sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 
builtins.ValueError: can't have unbuffered text I/O 

binarny nadal działa bez zarzutu:

> sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0) # works fine 
+0

Przynajmniej do czytania, podejrzewam, że to ma coś wspólnego z tekstem będącym Unicode, więc tym bajcie! = Char. Jeśli bazowy strumień bajtów jest zakodowany w utf-8, pojedynczy znak jest zmienną liczbą bajtów, więc musi być bufor, aby pomieścić pozostałe bajty po odczytaniu wszystkich znaków. Zakładam, że był nowy moduł dla io (i sys.stdout powyżej jest prawdopodobnie instancją klasy IO). –

Odpowiedz

1

Dla plików tekstowych, jeśli ciebie chcą korzystać z linii po linii buforowania, należy open(..., buffering=1)

z dokumentacji Pythona:

1, aby wybrać buforowanie linii (użytkową tylko w trybie tekstowym)