Ctrl + D ha uno strano effetto. Non chiude il flusso di input, ma causa solo un livello C fread()
per restituire un risultato vuoto. Per i file regolari, un risultato di questo tipo indica che il file è ora alla sua fine, ma è accettabile leggere altro, ad es. per verificare se qualcun altro ha scritto più dati nel file nel frattempo.
Inoltre, ci sono problemi di buffering --- tre livelli di questi!
L'iterazione di Python su un file blocca il buffering. Evitalo per leggere da flussi interattivi.
il file stdin di livello C ha, per impostazione predefinita, un buffer di riga.
terminale stesso (!), Nella sua modalità di default ("modalità cotto"), si legge una riga di dati prima di inviarli al processo, il che spiega il motivo per cui digitando Ctrl +D non ha qualsiasi effetto quando digitato nel mezzo di una linea.
Questo esempio evita il primo numero, che è tutto ciò che serve, se invece si sta rilevando Ctrl + D digitato come una propria linea:
import sys
while True:
line = sys.stdin.readline()
print repr(line)
si ottiene ogni linea con un '\n'
finale, a parte quando la "linea" viene da un Ctrl + D, nel qual caso si ottiene solo ''
(ma la lettura continua, a meno che, naturalmente, aggiungiamo if line == '': break
).
fonte
2013-03-27 20:29:44
Quale shell stai usando? – squiguy
Oh, e devi inserire 'CTRL-D' due volte. –
E l'inserimento di 'CTRL-D' due volte non funziona. –