Impossible de taper la lettre «b» dans le shell Python sous OS X


8

J'ai un problème avec ma lettre "b" dans le shell Python sous OS X. Je ne peux pas taper "b", mais "B" a bien fonctionné.

Comment puis-je résoudre ce problème?


Qu'entendez-vous par «ne peut pas taper»? Quelque chose vous empêche physiquement d'appuyer sur la touche b, sauf si vous appuyez également sur Maj? Ou il n'y a aucun effet à appuyer sur le bouton? Ou vous obtenez un message d'erreur lorsque vous ligne qui contient uniquement "b"?
Joachim Sauer

Quoi exactement ? Que faites-vous / saisissez-vous exactement, que se passe-t-il exactement et quel est exactement le message d'erreur (s'il y en a un)?

Si aucune autre lettre n'est affectée, cela ressemble à un problème matériel avec votre clavier et doit être migré vers Super User.
pavium

Lorsque vous appuyez sur la lettre "b" n'a aucun effet et ne tapez pas la lettre "b" mais lorsque j'appuie sur la lettre "B" (Maj + b), puis sur la lettre "B" dans la console

2

Réponses:


9

La ligne problématique dans votre .pythonstartupest quelque chose comme:

 readline.parse_and_bind("bind ^I rl_complete") # darwin libedit

Cela .pythonstartupva le réparer ...

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")

cela a résolu le même problème pour moi!
zmo

+1 Je viens d'installer python de homebrew hier et j'ai rencontré ce problème ce matin. Mise à jour de mon fichier de démarrage python et tout va bien à nouveau. C'est un effet secondaire très spécifique (et extrêmement étrange).
Seth

2

Tout d'abord, cela ne s'est produit que lorsque j'ai mis à jour python 2.7.1 à 2.7.3. Cela dit, le correctif est en jeu:

ancienne ligne:

if(sys.platform == 'darwin'): #FIX

nouvelle ligne:

if(sys.platform == 'darwin') and 'libedit' in readline.__doc__: #FIX

Le code complet dans mon ~ / .pythonrc

import atexit
import os
try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    import sys
    if(sys.platform == 'darwin') and 'libedit' in readline.__doc__: #FIX
    # OSX
        readline.parse_and_bind ("bind ^I rl_complete")
    else:
    # Linux
        readline.parse_and_bind("tab: complete")

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del atexit, save_history, historyPath

1

J'ai le même problème. Cela se produit lorsque vous utilisez la version MacPorts de Python dans Snow Leopard.

Je ne vois pas ce problème dans Python d'Apple fourni avec Mac OS X. Ainsi, la solution de contournement devrait être de définir le PYTHONPATHpointage vers les packages MacPorts:

/opt/local/lib/python/site-packages:/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ 

(ou une version Python différente) et utilisez le Python d'Apple.


1

Malheureusement, la solution de contournement n'est pas judicieuse.

Apple suppose que sa version est inchangée lors des mises à niveau et autres fonctions. Au lieu de cela, il est recommandé que si vous souhaitez mettre à niveau python ou le développer, vous installez une version locale, sous /optou dans votre dossier personnel.

J'ai également le même problème et je n'utilise pas la version MacPorts de python.


J'utilise la dernière version de vpythonVisual Python de www.vpython.org sous Mac OX X Lion fonctionnant sur le dernier MacBook Air (génération 3).

J'ai installé vpython en utilisant leur dernier binaire et en suivant leurs instructions. Il est livré avec un programme d'installation donc il suffit de pointer et cliquer. Il s'agit d'une version modifiée de Python 2.7.1. C'est la version 32 bits. (Je crois qu'ils ne l'ont pas porté sur 64 bits). J'ai ensuite installé VPython-Mac-Py2.7-5.71. J'ai suivi ceci par scipy de www.scipy.org et matplotlib de matplotlib.sourceforge.net Toutes ces installations utilisent un programme d'installation.

Lorsque je lance python depuis leur outil de développement, idle, ou la variante vpython, vidle, je n'ai aucun problème. Si j'ouvre un terminal et exécute python à partir d'un shell bash, le shell ne reconnaîtra pas la touche "b" du clavier. Il vous donnera un son de «cloche», au lieu de taper le «caractère b». Cependant, vous pouvez saisir la lettre «B». On dirait que cette clé est mappée à un «caractère» non affiché incorrect, peut-être le caractère «cloche» dans l'ancien code ASCII.

J'ai essayé de changer l'émulation en xterm, vt100, vt102. J'ai également joué avec différents schémas d'encodage comme en utilisant simplement UTF-8. J'ai également appuyé sur différentes combinaisons de touches spéciales comme la commande-b, etc. Rien n'a fonctionné.

Ma seule solution de contournement consiste à écrire des scripts inactifs ou vidle.

J'espère que cela aide à clarifier le problème.


J'ai travaillé un peu plus à ce sujet ... on dirait que d'autres ont des problèmes similaires avec d'autres interfaces python. Dans mon système, j'ai un fichier .pythonrc.py qui est analysé au démarrage de python (indiqué par PYTHONSTARTUP). Dans ce fichier, deux modules sont chargés rlcompleter et readline. Il appelle ensuite readline.parse_and_bind ("bind -v"). Cet appel initialise le module readline en copiant les liaisons depuis le shell (vous pouvez voir la vôtre en allant dans le shell bash et en tapant 'bind -v' (sans guillemets)). L'un d'eux doit créer le problème. Si je commente la ligne (placez-la devant.), Le problème disparaît.
ga mercier

1
Vous pouvez modifier votre message pour l'inclure, ce qui pourrait le rendre plus facile à lire.
slhck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.