Sto scrivendo un programma che visualizza il testo sul terminale usando Unix less (1). Ecco la parte pertinente:Input fallito dopo aver ucciso meno (1) sottoprocesso
In attesa di una conclusione inferiore, ascolto l'eccezione KeyboardInterrupt. Se ne prendo uno, uccido meno con un segnale SIGTERM e esco dal mio programma.
Ora, quando ciò accade, sono tornato al prompt della shell, ma la shell non riecheggia più ciò che scrivo e devo eseguire un reset (1) per farlo funzionare di nuovo.
Qualche idea su come rendere meno muoiono senza portare il mio stdin con esso nella tomba? La sorgente completo è disponibile sul https://github.com/jforberg/rfc/blob/master/rfc.py
EDIT: Dopo alcuni esperimenti, ho scoperto che sia meno (1) e l'uomo (1) di default ignorare la corsa di controllo-C. Quindi semplicemente ignorarlo potrebbe essere un'opzione praticabile. Non sono sicuro di pensare che sia il modo giusto di farlo, quindi se qualcuno ha dei suggerimenti sono ancora molto interessato.
Come soluzione alternativa, potresti inserire un 'os.system ('reset')' alla fine del tuo script. La soluzione corretta probabilmente implicherà l'interruzione di 'less' educatamente, cioè scrivere un sigint e 'q' nel suo stdin e poi aspettare che si completi. – wim
@wim re la tua "soluzione adeguata": certo! Il pensiero di scrivere la "q" a me stesso non mi era accaduto. Anche dopo un po 'di programmazione di Linux, devo ancora ricordare che tutto è un file. Per favore, trasferiscilo in una risposta e io lo accetterò. – jforberg
Poiché non ci sono trucchi 'setpgid',' less' dovrebbe essere nello stesso gruppo di processi del processo Python, quindi riceverà lo stesso^C del processo Python.Suppongo che cerchi di fare il suo trattamento speciale, anche se ... Che ne dici di usare '-e' (' --quit-at-eof') in modo che possa uscire dopo che il tuo programma riaggancia? – ephemient