2014-11-21 7 views
17

Python 2 ha supportato l'I/O di testo non bufferato.Perché l'I/O di testo deve essere memorizzato nel buffer in python 3?

Lo stesso approccio non funziona in python 3. Perché l'I/O di testo non bufferizzato è disabilitato?

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

Il binario funziona ancora bene:

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

Almeno per la lettura, ho il sospetto che ha qualcosa a che fare con testi facenti unicode, in modo che byte! = Char. Se il flusso di byte sottostante è codificato in utf-8, un singolo carattere è un numero variabile di byte, quindi deve essere presente un buffer per contenere i byte rimanenti dopo la lettura dei caratteri completi. Presumo che ci fosse un pep per il nuovo modulo io (e sys.stdout sopra è probabilmente un'istanza di classe IO). –

risposta

1

Per i file di testo, se si vuole utilizzare la linea per linea buffering, utilizzare open(..., buffering=1)

da documentazione python:

1 per selezionare il buffering linea (utilizzabile solo in modalità testo)