Der Buchstabe "b" kann in der Python-Shell unter OS X nicht eingegeben werden


8

Ich habe ein Problem mit meinem Buchstaben "b" in der Python-Shell unter OS X. Ich kann "b" nicht eingeben, aber "B" hat einwandfrei funktioniert.

Wie kann ich dieses Problem lösen?


Was meinst du mit "kann nicht tippen"? Etwas hindert Sie physisch daran, die Taste b zu drücken, es sei denn, Sie drücken auch die Umschalttaste? Oder hat das Drücken der Taste keine Auswirkung? Oder erhalten Sie eine Fehlermeldung, wenn Sie eine Zeile verwenden, die nur "b" enthält?
Joachim Sauer

Was genau ? Was genau machst / tippst du ein, was genau passiert und was genau ist die Fehlermeldung (falls es eine gibt)?

Wenn keine anderen Buchstaben betroffen sind, klingt dies wie ein Hardwareproblem mit Ihrer Tastatur und sollte auf Super User migriert werden.
Pavium

Wenn Sie den Buchstaben "b" drücken, haben Sie keinen Effekt und geben Sie nicht den Buchstaben "b" ein, aber wenn ich den Buchstaben "B" drücke (Umschalt + b), geben Sie den Buchstaben "B" in die Konsole ein

2
Siehe auch diese Frage .
Keith Thompson

Antworten:


9

Die problematische Linie in Ihrem .pythonstartupist so etwas wie:

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

Dies .pythonstartupwird es beheben ...

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

das hat das gleiche Problem für mich gelöst!
Zmo

+1 Ich habe gestern gerade Python von Homebrew installiert und bin heute Morgen auf dieses Problem gestoßen. Meine Python-Startdatei wurde aktualisiert und alles ist wieder gut. Es ist eine sehr spezifische (und äußerst merkwürdige) Nebenwirkung.
Seth

2

Erstens geschah dies erst, als ich Python 2.7.1 auf 2.7.3 aktualisierte. Das heißt, das Update steht auf dem Spiel:

alte Zeile:

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

Neue Zeile:

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

Der vollständige Code in meinem ~ / .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

Ich habe das gleiche Problem. Dies geschieht, wenn Sie die MacPorts-Version von Python in Snow Leopard verwenden.

Ich sehe dieses Problem nicht in Apples Python, das mit Mac OS X geliefert wird. Daher sollte die Problemumgehung darin bestehen, auf die PYTHONPATHMacPorts-Pakete zu verweisen:

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

(oder eine andere Python-Version) und verwenden Sie Apples Python.


1

Leider ist die Problemumgehung nicht sinnvoll.

Apple geht davon aus, dass seine Version bei Upgrades und anderen Funktionen unverändert bleibt. Stattdessen wird empfohlen, dass Sie eine lokale Version entweder unter /optoder in Ihrem Home-Ordner installieren, wenn Sie Python aktualisieren oder erweitern möchten .

Ich habe auch das gleiche Problem und verwende nicht die MacPorts-Version von Python.


Ich verwende die neueste Version von vpythonVisual Python von www.vpython.org unter Mac OX X Lion, das im neuesten MacBook Air (Generation 3) ausgeführt wird.

Ich habe vpython mit der neuesten Binärdatei und den Anweisungen installiert. Es wird mit einem Installationsprogramm geliefert, sodass Sie mit der Maus klicken können. Dies ist eine modifizierte Version von Python 2.7.1. Es ist eine 32-Bit-Version. (Ich glaube, sie haben es nicht auf 64 Bit portiert). Ich habe dann VPython-Mac-Py2.7-5.71 installiert. Ich folgte mit scipy von www.scipy.org und matplotlib von matplotlib.sourceforge.net. Alle diese Installationen verwenden ein Installationsprogramm.

Wenn ich Python aus dem Entwicklungstool Idle oder der Vpython-Variante Vidle starte, habe ich keine Probleme. Wenn ich ein Terminal öffne und Python über eine Bash-Shell ausführe, erkennt die Shell die Taste "b" auf der Tastatur nicht. Es gibt Ihnen einen "Glockenton", anstatt das "Zeichen b" einzugeben. Sie können jedoch den Buchstaben 'B' eingeben. Es sieht so aus, als wäre dieser Schlüssel einem falschen, nicht angezeigten 'Zeichen' zugeordnet, möglicherweise dem 'Glocken'-Zeichen im alten ASCII-Code.

Ich habe versucht, die Emulation in xterm, vt100, vt102 zu ändern. Ich habe auch mit verschiedenen Codierungsschemata gespielt, wie zum Beispiel mit UTF-8. Ich habe auch verschiedene Kombinationen von Spezialtasten wie Befehl-B usw. gedrückt. Nichts hat funktioniert.

Meine einzige Problemumgehung besteht darin, Skripte im Leerlauf oder im Leerlauf zu schreiben.

Ich hoffe, dies hilft, das Problem zu klären.


Ich habe ein bisschen mehr daran gearbeitet ... es sieht so aus, als hätten andere ähnliche Probleme mit anderen Python-Schnittstellen. In meinem System habe ich eine .pythonrc.py-Datei, die beim Start von Python analysiert wird (auf die PYTHONSTARTUP zeigt). In dieser Datei werden zwei Module rlcompleter und readline geladen. Anschließend wird readline.parse_and_bind ("bind -v") aufgerufen. Dieser Aufruf initiiert das Readline-Modul, indem die Bindungen aus der Shell kopiert werden (Sie können Ihre sehen, indem Sie in die Bash-Shell gehen und 'bind -v' eingeben (keine Anführungszeichen)). Eine davon muss das Problem verursachen. Wenn ich die Zeile kommentiere (# davor stellen), verschwindet das Problem.
ga mercier

1
Sie können Ihren Beitrag so bearbeiten , dass er das Lesen erleichtert.
Slhck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.