7 votes

L'utilisation de Python fout en l'air le shell (et/ou le terminal ?) !

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 ) :

  1. Exécuter which python3.4 .
  2. Exécuter python3.4 .
  3. Appuyez sur la touche Retour une fois, puis entrez exit() dans le shell Python.
  4. Appuyez sur Retour deux fois de plus.
  5. 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() ou control D type reset à 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 !

10voto

yoliho Points 340

Il semble qu'il y ait un problème avec les versions récentes de Python sur Macports, voir ceci bug

Une solution de contournement est d'installer pyXX-readline (py35-readline a été produit juste pour ce bogue)

Une autre solution consiste à installer Python en ajoutant la variante +readline.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X