Неможливо ввести літеру "b" в оболонці Python в OS X


8

У мене є проблема з моїм "б" лист в оболонці Python в OS X. Я не можу ввести "б", але "B" працював нормально.

Як вирішити цю проблему?


Що ви маєте на увазі під "не вводити"? Щось фізично заважає вам натискати клавішу b, якщо ви також не натискаєте Shift? Або немає ефекту від натискання кнопки? Або ви отримаєте повідомлення про помилку, коли у вас рядок, що містить тільки "b"?
Joachim Sauer

Що саме ? Що саме ви робите / набираєте, що саме відбувається і що саме є повідомлення про помилку (якщо є)?

Якщо ніяких інших листів не вплине, це звучить як апаратна проблема з вашою клавіатурою і має бути перенесена на Super User.
pavium

При натисканні на літеру "b" немає ефекту і не вписуйте "b", але коли я натискаю на літеру "B" (Shift + b), тоді в консолі вводиться буква "B"

2
Дивіться також це питання .
Keith Thompson

Відповіді:


7

Проблемна лінія у вашій .pythonstartup це щось на зразок:

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

Це .pythonstartup це виправити ...

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

що вирішило те ж саме для мене!
zmo

+1 Я тільки що вчора встановив python з доморощеного і сьогодні вранці зіткнувся з цією проблемою. Оновлено файл запуску python і все знову добре. Це дуже специфічний (і надзвичайно дивний) побічний ефект.
Seth

2

По-перше, цього не сталося, поки я не оновив python 2.7.1 до 2.7.3. Тим не менш, виправлення знаходиться на рядку:

стара лінія:

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

новий рядок:

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

Повний код у моєму ~ / .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

У мене те ж саме. Це відбувається, коли ви використовуєте версію MacPorts Python у Snow Leopard.

Я не бачу цього питання в Python від Apple, який поставляється з Mac OS X. Таким чином, обхідний шлях повинен бути встановлений PYTHONPATH вказуючи на пакети MacPorts:

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

(або іншу версію Python) і використовуйте Python від Apple.


1

На жаль, обхідний шлях не є розумним.

Apple вважає, що його версія не змінюється при виконанні оновлення та інших функцій. Замість цього рекомендується, якщо ви хочете оновити python або розширити його, щоб встановити локальну версію, або під /opt або домашню папку.

У мене також є одна і та ж проблема, і я не використовую версію Python для MacPorts.


Я використовую останню версію vpython, візуальний пітон, від www.vpython.org під Mac OS X Lion, запущений в останньому MacBook Air (покоління 3).

Я встановив vpython, використовуючи їх останній бінарний код і використовуючи їхні інструкції. Він поставляється з інсталятором, так що це точка і натисніть. Це модифікована версія Python 2.7.1. Це 32-бітна версія. (Я вважаю, що вони не перенесли його до 64 біт). Потім я встановив VPython-Mac-Py2.7-5.71. Я слідував за цим scipy з www.scipy.org і matplotlib від matplotlib.sourceforge.net Всі ці установки використовують інсталятор.

Коли я запускаю python з їх інструменту розробки, простою, або vpython варіант, vidle, у мене немає проблем. Якщо я відкриваю термінал і запускаю python з оболонки bash, оболонка не розпізнає клавішу "b" на клавіатурі. Це дасть вам звук «дзвінка», замість того, щоб вводити «символ b». Тим не менш, ви можете ввести букву 'B'. Схоже, що цей ключ зіставлено з деяким неправильним не-відображуваним символом, можливо, символом "bell" у старому коді ASCII.

Я спробував змінити емуляцію на xterm, vt100, vt102. Я також грав з різними схемами кодування, наприклад, просто використовуючи UTF-8. Я також натиснув різну комбінацію спеціальних клавіш, таких як command-b і т.д. Нічого не працювало.

Мій єдиний обхідний шлях полягає в тому, щоб писати сценарії від простою або vidle.

Я сподіваюся, що це допоможе з'ясувати проблему.


Я працював трохи більше на цьому ... схоже, інші мають подібні проблеми з іншими інтерфейсами Python. У моїй системі у мене є файл .pythonrc.py, який обробляється, коли починається python (на що вказує PYTHONSTARTUP). У цьому файлі завантажуються два модуля rlcompleter і readline. Потім викликає readline.parse_and_bind ("bind -v"). Цей виклик використовує модуль readline, копіюючи прив'язки з оболонки (ви можете бачити ваш, перейшовши в оболонку bash і набравши 'bind -v' (без лапок)). Один з них повинен створити проблему. Якщо я коментую рядок (місце # перед ним.), Проблема зникає.
g a mercier

1
Ти можеш редагувати Ваша публікація може включати її, що може полегшити читання.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.