Le problème
Le simple fait d'ouvrir et de fermer le sous-shell Python fait sauter mon shell (ou éventuellement le terminal ?). Il semble supprimer la capacité de l'interpréteur de commandes à imprimer tout texte que je saisis, y compris les nouvelles lignes après la saisie d'une commande.
Le problème se produit pour python3.4, python2.7 et python2.6, mais pas pour python2.5.
Cela ne s'est jamais produit auparavant (à ma connaissance), et cela ne se produit pas pour d'autres logiciels que j'ai utilisés (VIM, Emacs, etc.).
J'ai confirmé qu'il ne fonctionne pas avec le terminal standard d'Apple (version 2.2.3 [303.2]), iTerm2 (build 2.1.1) et XTerm (269).
Il est intéressant de noter qu'il se brise sous bash
mais pas zsh
o csh
.
Exemple de comportement
Pour démontrer, je fais ce qui suit ( $SHELL
est /bin/bash
) :
- Exécuter
which python3.4
. - Exécuter
python3.4
. - Appuyez sur la touche Retour une fois, puis entrez
exit()
dans le shell Python. - Appuyez sur Retour deux fois de plus.
- Entrez
python3.4 --version
.
Voici ce que je vois pour quelques-unes des principales versions de Python que j'ai installées :
Python3.4 -- problématique
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 -- problématique
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 -- problème
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 -- Ça marche !
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:~$
L'exécuter dans zsh
o csh
semble fonctionner parfaitement :
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
Ce que je pense jusqu'à présent :
Le fait que le comportement semble être le même pour trois terminaux me fait penser qu'il ne s'agit pas d'un problème de terminal.
Le fait que cela fonctionne dans Zsh et Csh mais pas dans Bash me fait penser que c'est un problème de shell.
Le fait que les versions qui ne fonctionnent pas (3.4, 2.7, 2.6) sont toutes installées sous le nom de /opt/local/bin/
(l'emplacement habituel d'installation de MacPorts), mais la version qui fonctionne (2.5) est installée sous /usr/bin/
Cela me fait me demander si une mise à jour récente de MacPorts (poussée peut-être jusqu'à 20 jours avant le 24 août 2015 ??) n'a pas cassé quelque chose qui fait que Python et Bash ne fonctionnent pas ensemble !
3 votes
Une supposition - les pythons de macports ne sont pas commis avec GNU readline - essayez d'installer pyXX-readline
0 votes
En plus de la solution de @Mark et jusqu'à ce que le problème soit résolu, lorsque vous quittez Python avec
exit()
,quit()
oucontrol D
typereset
à l'invite (elle ne sera pas renvoyée au terminal) et attendez que l'invite réapparaisse.0 votes
@Mark : Ça a marché ! Si tu l'écris comme une réponse, je l'accepterai. Merci beaucoup !