Le terminal OS-X se comporte bizarrement après avoir exécuté Python de manière interactive

11

Après avoir exécuté une repl python (2.7.10) dans le terminal os-x et quitté, le terminal ne fait plus d'écho d'entrée de type et d'autres choses étranges se produisent. Si je lance à pythonnouveau et exit(), alors le terminal semble être restauré. Je ferme maintenant l'onglet et j'en ouvre un nouveau, donc je n'ai pas testé cela intensivement.

Je suppose que cela est lié aux paramètres du terminal, mais c'est une chose récente et je n'ai rien changé dont je me souvienne. Python est installé avec macports, s'il y a quelque chose à voir avec des dépendances mal appariées avec une bibliothèque de console. 2.7.10 a été installé il y a quelque temps, et cela ne s'est pas produit après l'installation.

Se fissure les articulations et s'ouvreterminal

[~]: 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`

De plus, l'exécution de python à nouveau et la frappe ctrl-daboutissent à cette sortie:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 
Andrew Backer
la source
Pourquoi installez-vous Python via macports? Python v2.7.10 est inclus avec El Cap, et je pense que Yosemite ... Y a-t-il quelque chose en particulier que vous obtenez des ports Mac?
Benjamin Schollnick du
Eh bien, en utilisant 2.7.tout ce qui est supérieur à ce qui a été livré avec mac. Ne pas toucher au système python (problème standard sur unix), exécuter 2.7 avec des options SIG personnalisées compilées, avec le paquet mgmt pour celles-ci, ainsi que 3.4 en même temps. Mais la vraie raison pour laquelle vous devriez le faire est de ne pas fsck avec le système python.
Andrew Backer,
L'application python fait-elle une sorte de gestion de fenêtres? (Par exemple. Utilisation de malédictions, de malédictions, etc.)
Benjamin Schollnick
Il n'y a pas d'application, il suffit de taper pythonpuisctrl-d
Andrew Backer

Réponses:

12

Il y a un bogue ouvert dans MacPorts sur ce problème:

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

Il indique que l'installation de python avec l'option "+ readline" résout le problème, que j'ai vérifié en le faisant moi-même.

sudo port uninstall python27
sudo port install python27 +readline
B. Plage
la source
9
Merde, merci d'avoir trouvé ce rapport de bogue. FWIW, Il n'est pas possible de désinstaller python27 (trop de packages en dépendent, normalement), vous devriez donc reconstruire à la place. Courez sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline. Si votre arborescence locale est obsolète, la variante + readline ne sera pas disponible; le selfupdaterésoudra cela.
Andrew Backer,
8

Les modes du terminal sont définis par votre application sur raw ou cbreak, et en cas de sortie anormale, les modes ne sont pas restaurés. En particulier, la fonctionnalité qui mappe la Enterclé (control / M aka retour chariot) à la nouvelle ligne (control / J aka line feed) est souvent désactivée dans ce cas. Vous pouvez résoudre le problème des retours en entrant

stty sane

suivi par controlJ

Cela vous permettra au moins de saisir à nouveau des commandes, bien que les caractères d'édition tels que ceux backspacequi ne sont pas affectés à leurs fonctions habituelles.

Certains peuvent également conseiller d'utiliser la resetcommande, mais les symptômes donnés ne sont pas pertinents pour ce que fait ce programme.

Pour plus de lecture

Thomas Dickey
la source
stty echosemble résoudre le problème ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Je ne sais pas s'il s'occupe de tout. Je pense que quelque chose ne va pas avec mon python, car les erreurs de syntaxe m'obligent à frapper manuellement la nouvelle ligne pour commencer à entrer une nouvelle commande, et cela ne devrait pas être ainsi.
Andrew Backer du
Bien que cela ne règle pas le problème, cela me permet au moins de le résoudre après coup. C'est assez bon pour moi, pour l'instant. S'il y a un moyen de savoir pourquoi cela se produit, j'aimerais savoir.
Andrew Backer