2010-08-14 2 views
23

Мне было интересно, может ли кто-нибудь объяснить, почему внезапно в интерактивном режиме Python все клавиши со стрелками не работают?История интерактивного режима Python и клавиши со стрелками

Когда я нажимаю кнопку, например, чтобы пройти через историю команд, я получаю «^ [[A». То же самое с любыми другими клавишами со стрелками.

Я понятия не имею, почему это произошло, и оно работало до (на OS X Snow Leopard). Кто-нибудь знает, как это исправить?

Большое спасибо,

G

ответ

6

Вы не говорите, какой Python вы используете, но симптомы, о которых вы говорите, обычно вызваны тем, что Python не строится с поддержкой readline. В эти дни Python на OS X можно построить, чтобы использовать библиотеку GNU readline или библиотеку Apple editline (AKA libedit). Вы можете использовать следующие две команды, чтобы показать, какой именно Python вы используете. Если это не поможет вам понять, что происходит, отредактируйте свой вопрос, чтобы показать вывод этих команд.

Вот пример, который показывает недавний MacPorts Python 2.6 на OS X 10.6:

$ python -c 'import sys;print(sys.version);print(sys.executable)' 
2.6.5 (r265:79063, Jul 15 2010, 01:53:46) 
[GCC 4.2.1 (Apple Inc. build 5659)] 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python 

$ otool -L $(python -c 'import readline; print(readline.__file__)') 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/readline.so: 
    /opt/local/lib/libreadline.6.1.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 

Путь префикса /opt/local/ местоположение по умолчанию для MacPorts установленного программного обеспечения и выход из otool указывает на то, что readline модуль этого питона динамически связана с библиотекой GNU readline, установленной MacPorts.

+0

Помочь взглянуть на модуль readline Python. По-видимому, мой был * не * связан с 'libreadline'. Я не знаю, почему нет, хотя после того, как readline был установлен просто отлично. В любом случае, 'port -f удалить py27-readline; порт install py27-readline' исправил его. – Celada

5

Такое поведение обычно показывает, когда у вас нет поддержки readline. Если вы используете MacPorts, попробуйте port install readline, проверьте, не исправит ли он это. Вы также можете увидеть this page для дальнейших объяснений.

(Также полезно знать: некоторые программы не используют readline даже если он присутствует в системе Вы можете заставить его на них, используя rlwrap (port install rlwrap). Например:. rlwrap ocaml -init code.ml пустит OCaml, читайте code.ml, и начать REPL с поддержкой readline)

+0

попытался установить Readline но Ждут» t помочь. Спасибо, в любом случае. Будет продолжать копать. – givp

+1

rlwrap сделал произведение как обходной способ. Благодаря! –

+0

Это сработало и для меня. Чтобы заставить его работать с pdb python, установите rlwrap ('install install rlwrap'), затем запустите python с помощью команды' rlwrap python'. См. Справочные страницы для rlwrap для передачи аргументов и т. Д. – Dannid

13

Я, наконец, получил эту работу. Мне просто нужно было установить readline с помощью easy_install и курсоров, а backspace начал работать магически.

sudo /opt/local/bin/easy_install-2.5 readline 
+1

easy_install readline сделал trik.Спасибо @mikael – gnuyoga

+1

'' apt-get install libncurses5-dev && pip install readline'' вариант работал на моем ubuntu (база на надежном) – vaab

+3

'pip install readline' было всем, что мне нужно. – maxko87

15

Если вы используете доморощенного, это легко исправить:

 
brew uninstall python 
brew uninstall readline 
brew install readline --universal 
brew install python 

Это установил ее для меня (под управлением OS X Mavericks 10.9.5)

+2

Я только что получил readline, работающий в python3 для OSX 10.10.1. Мне пришлось изменить последнюю строку на 'brew install python -readline -framework', а затем мне пришлось сделать следующее: (1) Добавить'/usr/local/share/python' в мой PATH. (2) 'pip3.4 установить readline'. Затем я набрал 'python3', и readline снова работала. –

+0

это заменит систему Python 2.7.10 на некоторую другую версию Python 2.7? – user5359531

+0

@ user5359531 Системный python не будет заменен, но если вы уже запустили установку python, то вы выполните эту процедуру, пиво может заменить версию _its_ более новой. Проверьте: 'какой python', (сообщает, что версия для пива находится в/usr/local/bin/python),' brew unlink python &&, который python' сообщает о версии системы, 'brew link python', чтобы восстановить версию Brew. Это не разрушительно. – ptim

Смежные вопросы