Il terminale OS-X si comporta in modo strano dopo aver eseguito Python in modo interattivo


11

Dopo aver eseguito un python repl (2.7.10) nel terminale os-x ed essere uscito, il terminale non echo più digitando input e accadono altre cose strane. Se corro di pythonnuovo e exit(), il terminale sembra ripristinato. Ora chiudo la scheda e ne apro una nuova, quindi non l'ho testato ampiamente.

Immagino che questo sia legato alle impostazioni del terminale, ma è una cosa recente e non ho cambiato nulla di ciò che ricordo. Python è installato macports, se c'è qualcosa a che fare con dipendenze errate con alcune librerie della console. 2.7.10 è stato installato qualche tempo fa e questo non è accaduto dopo l'installazione.

Crepa le nocche e si apreterminal

[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>>       *(press ctrl-d, the 2nd >>> is strange)
[~]:            *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`

Inoltre, eseguendo nuovamente python e colpendo i ctrl-drisultati in questo output:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 

Perché stai installando Python tramite macports? Python v2.7.10 è incluso in El Cap e penso che Yosemite ... C'è qualcosa in particolare che stai ricevendo da Mac Ports?
Benjamin Schollnick,

Bene, usando 2.7.qualcosa di più grande di quello che è stato spedito con Mac. Non toccare il sistema Python (problema standard sugli unix), eseguire 2.7 con le opzioni GIS personalizzate compilate, con il pacchetto mgmt per quelli, e 3.4 allo stesso tempo. Ma la vera ragione per cui dovresti farlo è non confondere con il sistema Python.
Andrew Backer,

L'applicazione python sta facendo qualche tipo di gestione delle finestre? (es. Uso di Maledizioni, NCurses, ecc.)
Benjamin Schollnick,

Non c'è nessuna applicazione, solo digitando pythone poictrl-d
Andrew Backer

Risposte:


12

C'è un bug aperto in MacPorts su questo problema:

https://trac.macports.org/ticket/48807

Dice che l'installazione di Python con l'opzione "+ readline" risolve il problema, che ho verificato facendolo da solo.

sudo port uninstall python27
sudo port install python27 +readline

9
Dannazione, grazie per aver trovato quella segnalazione di bug. FWIW, Non è possibile disinstallare python27 (troppi pacchetti dipendono da esso, normalmente), quindi dovresti invece ricostruire. Corri sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline. Se l'albero locale non è aggiornato, non sarà disponibile la variante + readline; lo selfupdaterisolverà.
Andrew Backer,

8

Le modalità del terminale sono impostate dall'applicazione su raw o cbreak e quando si esce in modo anomalo le modalità non vengono ripristinate. In particolare, la funzione che mappa il Entertasto (control / M aka ritorno a capo ) su newline (control / J aka line feed) è spesso disabilitata in questo caso. È possibile risolvere il problema con i ritorni inserendo

stty sane

seguito da controlJ

Ciò ti consentirà almeno di inserire nuovamente i comandi, sebbene i caratteri di modifica come quelli backspacepotrebbero non essere assegnati alle loro normali funzioni.

Alcuni possono anche consigliare di utilizzare il resetcomando, ma i sintomi indicati non sono rilevanti per quello che fa quel programma.

Per ulteriori letture


stty echosembra risolvere il problema ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Non sono sicuro che si occupi di tutto. Penso che ci sia qualcosa di un po 'sbagliato nel mio python, poiché gli errori di sintassi mi richiedono di premere manualmente newline per iniziare a immettere un nuovo comando, e non dovrebbe essere così.
Andrew Backer,

Sebbene questo non risolva il problema, almeno mi consente di risolverlo dopo il fatto. Questo è abbastanza buono per me, per ora. Se c'è un modo per scoprire perché questo sta accadendo, mi piacerebbe saperlo.
Andrew Backer,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.