Usando Python avvita la shell (e / o il terminale?)!


7

Il problema

Semplicemente aprendo e chiudendo la sotto-shell Python avvita la mia shell (o forse il terminale?). Sembra rimuovere la capacità della shell di stampare qualsiasi testo che inserisco, comprese le nuove righe dopo aver inserito un comando.

Il problema si verifica per python3.4, python2.7 e python2.6, ma non per python2.5.

Non è mai successo prima (che ho notato) e non succede per altri pacchetti software che ho usato (VIM, Emacs, ecc.).

Ho confermato che si rompe utilizzando il Terminale standard di Apple (Versione 2.2.3 [303.2]), iTerm2 (build 2.1.1) e XTerm (269).

È interessante notare che si rompe sotto bash, ma non zsho csh.

Esempio di comportamento

Per dimostrare, faccio quanto segue ( $SHELLè /bin/bash):

  1. Corri which python3.4.
  2. Corri python3.4.
  3. Premi il tasto Invio una volta, quindi entra exit()nella shell Python.
  4. Premi Ritorna altre due volte.
  5. Enter python3.4 --version.

Ecco cosa vedo per alcune delle versioni primarie di Python che ho installato:

Python3.4 - problematico

myself@localhost:~$ which python3.4
python3.4 is /opt/local/bin/python3.4
python3.4 is /opt/local/bin/python3.4
myself@localhost:~$ python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 3.4.3
myself@localhost:~$

Python2.7 - problematico

myself@localhost:~$ which python2.7
python2.7 is /opt/local/bin/python2.7
python2.7 is /usr/local/bin/python2.7
python2.7 is /usr/bin/python2.7
python2.7 is /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
python2.7 is /usr/bin/python2.7
python2.7 is /usr/local/bin/python2.7
python2.7 is /opt/local/bin/python2.7
myself@localhost:~$ python2.7
Python 2.7.10 (default, Aug 24 2015, 11:54:49)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 2.7.10
myself@localhost:~$

Python2.6 - problematico

myself@localhost:~$ which python2.6
python2.6 is /opt/local/bin/python2.6
python2.6 is /usr/bin/python2.6
python2.6 is /usr/bin/python2.6
python2.6 is /opt/local/bin/python2.6
myself@localhost:~$ python2.6
Python 2.6.9 (unknown, Aug 24 2015, 17:53:21)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 2.6.9
myself@localhost:~$

Python2.5 - Funziona!

myself@localhost:~$ which python2.5
python2.5 is /usr/bin/python2.5
python2.5 is /usr/bin/python2.5
myself@localhost:~$ python2.5
Python 2.5.6 (r256:88840, Jul 31 2011, 19:30:45)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
myself@localhost:~$
myself@localhost:~$
myself@localhost:~$ python2.5 --version
Python 2.5.6
myself@localhost:~$

Eseguendolo zsho cshsembra funzionare bene:

zsh

myself@localhost:~$ zsh
localhost% which python3.4
/opt/local/bin/python3.4
localhost%
localhost% python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> %                                                                           
ra%
ra%
ra% python3.4 --version
Python 3.4.3
localhost% exit
myself@localhost:~$

csh

myself@localhost:~$ csh
Running csh
[localhost:~] myself% which python3.4
/opt/local/bin/python3.4
[localhost:~] myself% python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> [localhost:~] myself%
[localhost:~] myself%
[localhost:~] myself% python3.4 --version
Python 3.4.3
[localhost:~] myself% exit
exit

Il mio pensiero finora:

Il fatto che il comportamento sembri lo stesso per tre terminali mi fa pensare che non sia un problema terminale.

Il fatto che funzioni in Zsh e Csh ma non in Bash mi fa pensare che sia un problema di shell.

Il fatto che le versioni che si rompono (3.4, 2.7, 2.6) siano tutte installate sotto /opt/local/bin/(posizione di installazione abituale di MacPorts), ma la versione che funziona (2.5) è installata sotto /usr/bin/, mi chiedo se alcuni recenti aggiornamenti di MacPorts (spinti forse fino a 20 giorni prima del 24 agosto 2015 ??) potrebbe aver rotto qualcosa che impedisce a Python e Bash di funzionare insieme!


3
Un'ipotesi: i python di Macport non sono impegnati con GNU readline - prova a installare pyXX-readline
Mark

Accanto alla soluzione @Mark e fino a quando il problema non viene risolto, quando si esce da Python con exit() , quit()o si control Ddigita resetal prompt (non verrà ripetuto l'eco al terminale) e attendere fino alla ricomparsa del prompt.
fd0

@Mark: ha funzionato! Se lo scrivi come risposta, lo accetterò. Grazie mille!
jvriesem,

Risposte:


10

Sembra che ci sia un problema con le recenti build di Python per Macports. Vedi questo bug

Una soluzione alternativa è installare pyXX-readline (py35-readline è stato prodotto proprio per questo errore)

Un altro è installare Python aggiungendo la variante + readline

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.