Nie można wpisać litery „b” w powłoce Pythona w OS X


8

Mam problem ze swoją literą „b” w powłoce Pythona w OS X. Nie mogę wpisać „b”, ale „B” działało dobrze.

Jak mogę rozwiązać ten problem?


Co rozumiesz przez „nie można pisać”? Coś fizycznie powstrzymuje cię przed naciśnięciem przycisku b, chyba że naciśniesz również Shift? A może nie ma efektu po naciśnięciu przycisku? Czy pojawia się komunikat o błędzie, gdy wiersz zawiera tylko „b”?
Joachim Sauer

Co dokładnie ? Co dokładnie robisz / piszesz, co dokładnie się dzieje i jaki dokładnie jest komunikat o błędzie (jeśli taki istnieje)?

Jeśli nie ma to wpływu na inne litery, brzmi to jak problem sprzętowy z klawiaturą i powinien zostać przeniesiony do superużytkownika.
pavium

Po naciśnięciu litery „b” nie wywołuje żadnego efektu i nie wpisuję litery „b”, ale gdy naciskam literę „B” (Shift + b), to w konsoli

2
Zobacz także to pytanie .
Keith Thompson,

Odpowiedzi:


9

Problematyczna linia w twoim .pythonstartupjest podobna do:

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

To .pythonstartupbędzie to naprawić ...

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

to rozwiązało dla mnie ten sam problem!
zmo

+1 Właśnie zainstalowałem wczoraj pytona z homebrew i napotkałem ten problem dziś rano. Zaktualizowałem mój plik startowy Pythona i wszystko znów jest dobrze. Jest to bardzo specyficzny (i bardzo dziwny) efekt uboczny.
Seth

2

Po pierwsze, tak się nie stało, dopóki nie zaktualizowałem Pythona do wersji 2.7.1 do wersji 2.7.3. To powiedziawszy, poprawka jest na linii:

stara linia:

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

Nowa linia:

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

Pełny kod w moim ~ / .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

Mam ten sam problem. Dzieje się tak, gdy używasz wersji Pythona w MacPorts w systemie Snow Leopard.

Nie widzę tego problemu w Pythonie Apple, który jest dostarczany z Mac OS X. Dlatego obejściem powinno być ustawienie PYTHONPATHwskazywania na pakiety MacPorts:

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

(lub inną wersję Pythona) i użyj Pythona Apple.


1

Niestety obejście to nie jest mądre.

Apple zakłada, że ​​jego wersja pozostaje niezmieniona podczas aktualizacji i innych funkcji. Zamiast tego zaleca się, aby w przypadku uaktualnienia lub rozszerzenia Pythona zainstalować wersję lokalną w /optfolderze domowym lub w folderze domowym.

Mam również ten sam problem i nie korzystam z wersji Pythona w wersji MacPorts.


Korzystam z najnowszej wersji vpythonVisual Pythona ze strony www.vpython.org pod Mac OX X Lion działającej w najnowszym MacBooku Air (generacja 3).

Zainstalowałem vpython używając ich najnowszego pliku binarnego i używając ich instrukcji. Jest dostarczany z instalatorem, więc wskaż i kliknij. To jest zmodyfikowana wersja Python 2.7.1. Jest to wersja 32-bitowa. (Wydaje mi się, że nie przenieśli go do 64 bitów). Następnie zainstalowałem VPython-Mac-Py2.7-5.71. Śledziłem to przez scipy z www.scipy.org i matplotlib z matplotlib.sourceforge.net Wszystkie te instalacje korzystają z instalatora.

Kiedy uruchamiam Pythona z ich narzędzia programistycznego, bezczynności lub wariantu vpython, vidle, nie mam problemów. Jeśli otworzę terminal i uruchomię python z powłoki bash, powłoka nie rozpozna klawisza „b” na klawiaturze. Daje dźwięk „dzwonka” zamiast wpisywania „znaku b”. Możesz jednak wpisać literę „B”. Wygląda na to, że ten klucz jest zamapowany na jakiś niepoprawny „nie wyświetlany” znak, być może znak „dzwonka” w starym kodzie ASCII.

Próbowałem zmienić emulację na xterm, vt100, vt102. Grałem też przy użyciu różnych schematów kodowania, takich jak UTF-8. Nacisnąłem także inną kombinację klawiszy specjalnych, takich jak Command-b itp. Nic nie działało.

Moim jedynym obejściem jest pisanie skryptów bezczynnie lub vidle.

Mam nadzieję, że to pomoże wyjaśnić problem.


Pracowałem nad tym trochę więcej ... wygląda na to, że inni mają podobne problemy z innymi interfejsami Pythona. W moim systemie mam plik .pythonrc.py, który jest analizowany podczas uruchamiania Pythona (wskazywany przez PYTHONSTARTUP). W tym pliku załadowano dwa moduły rlcompleter i readline. Następnie wywołuje readline.parse_and_bind („bind -v”). To wywołanie inicjuje moduł readline, kopiując wiązania z powłoki (możesz zobaczyć swoje, wchodząc do powłoki bash i wpisując „bind -v” (bez cudzysłowów)). Jeden z nich musi stworzyć problem. Jeśli skomentuję wiersz (umieść # przed nim), problem zniknie.
ga mercier

1
Możesz edytować swój post, aby to uwzględnić, co może ułatwić czytanie.
slhck
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.