¡Usar Python atornilla la cáscara (y / o el terminal?)!

7

El problema

Simplemente abriendo y cerrando el sub-shell de Python, arruina mi shell (¿o posiblemente el terminal?). Parece que se elimina la capacidad del shell para imprimir cualquier texto que ingrese, incluidas las nuevas líneas después de ingresar un comando.

El problema se produce para python3.4, python2.7 y python2.6, pero no para python2.5.

Nunca antes había ocurrido (como he notado), y no sucede con otros paquetes de software que he usado (VIM, Emacs, etc.).

He confirmado que se rompe con el Terminal estándar de Apple (versión 2.2.3 [303.2]), iTerm2 (compilación 2.1.1) y XTerm (269).

Curiosamente, se rompe en bash , pero no en zsh o csh .

Ejemplo de comportamiento

Para demostrar, hago lo siguiente ( $SHELL es /bin/bash ):

  1. Ejecutar which python3.4 .
  2. Ejecutar python3.4 .
  3. Presione la tecla Retorno una vez, luego ingrese exit() en el shell de Python.
  4. Presiona Retorno dos veces más.
  5. Introduce python3.4 --version .

Esto es lo que veo en algunas de las versiones principales de Python que he instalado:

Python3.4 - problemático

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 - problemático

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 - problemático

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 - ¡Funciona!

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:~$

Ejecutarlo en zsh o csh parece funcionar bien:

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

Mi pensamiento hasta ahora:

El hecho de que el comportamiento sea el mismo para tres terminales me hace pensar que no es un problema de terminal.

El hecho de que funcione en Zsh y Csh pero no en Bash me hace pensar que es un problema de shell.

El hecho de que las versiones que se rompen (3.4, 2.7, 2.6) estén todas instaladas en /opt/local/bin/ (ubicación de instalación habitual de MacPorts), pero la versión que funciona (2.5) está instalada en /usr/bin/ , me pregunto si ¡Es posible que alguna actualización reciente de MacPorts (tal vez hasta 20 días antes del 24 de agosto de 2015) haya roto algo que haga que Python y Bash no funcionen juntos!

    
pregunta jvriesem 21.09.2015 - 20:14

1 respuesta

10

Parece que hay un problema con las compilaciones de Macports recientes de Python. Vea este error

Una solución alternativa es instalar pyXX-readline (py35-readline se produjo solo para este error)

Otro es instalar python agregando la variante + readline

    
respondido por el Mark 23.09.2015 - 20:07

Lea otras preguntas en las etiquetas