Control-D non dovrebbe rendere il vostro programma "solo stop" - dovrebbe chiudere standard input, e se i vostri programma si occupa di che correttamente, può benissimo continuare se ha bisogno di!
Ad esempio, dato il seguente st.py
:
import sys
def main():
inwas = []
for line in sys.stdin:
inwas.append(line)
print "%d lines" % len(inwas),
print "initials:", ''.join(x[0] for x in inwas)
if __name__ == '__main__':
main()
abbiamo potuto vedere qualcosa di simile
$ python st.py
nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura
che la diritta via era smarrita
3 lines initials: nmc
$
se il controllo-D viene colpito subito dopo l'entrare nella terza riga - il programma si rende conto che l'input standard è eseguito e esegue la necessaria post-elaborazione, tutto pulito e corretto.
Se il tuo programma termina prematuramente su control-D, deve essere codificato male - che ne dici di modificare la tua domanda per aggiungere il più piccolo programma "misbehaving" che puoi immaginare, così possiamo mostrarti esattamente come stai andando sbagliato?
fonte
2009-12-12 07:12:27
Il modo in cui la maggior parte dei terminali funziona, non appena si preme Invio, l'input viene inviato a Python. –
Se vuoi cambiare il modo in cui funziona, Python deve cambiare le impostazioni del terminale, che è magia nera ... vedi il modulo 'termios', forse? http://docs.python.org/library/termios.html –