Использование python завинчивает оболочку (и / или терминал?)!


7

Эта проблема

Просто открывая и закрывая суб-оболочку Python, можно завинтить мою оболочку (или, возможно, терминал?). Кажется, это устраняет возможность оболочки печатать любой вводимый мной текст, в том числе переводы строк после ввода команды.

Проблема возникает для python3.4, python2.7 и python2.6, но не для python2.5.

Это никогда не происходило раньше (что я заметил) и не происходит с другими пакетами программного обеспечения, которые я использовал (VIM, Emacs и т. Д.).

Я подтвердил, что он ломается, используя стандартный терминал Apple (версия 2.2.3 [303.2]), iTerm2 (сборка 2.1.1) и XTerm (269).

Интересно, что он ломается bash, но не zshили csh.

Пример поведения

Чтобы продемонстрировать, я делаю следующее ( $SHELLесть /bin/bash):

  1. Беги which python3.4.
  2. Беги python3.4.
  3. Нажмите клавишу Return один раз, затем войдите exit()в оболочку Python.
  4. Хит Возврат еще два раза.
  5. Введите python3.4 --version.

Вот то, что я вижу для нескольких основных версий Python, которые я установил:

Python3.4 - проблемный

myself@localhost:~$ which python3.4
python3.4 is /opt/local/bin/python3.4
python3.4 is /opt/local/bin/python3.4
myself@localhost:~$ python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 3.4.3
myself@localhost:~$

Python2.7 - проблемный

myself@localhost:~$ which python2.7
python2.7 is /opt/local/bin/python2.7
python2.7 is /usr/local/bin/python2.7
python2.7 is /usr/bin/python2.7
python2.7 is /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
python2.7 is /usr/bin/python2.7
python2.7 is /usr/local/bin/python2.7
python2.7 is /opt/local/bin/python2.7
myself@localhost:~$ python2.7
Python 2.7.10 (default, Aug 24 2015, 11:54:49)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 2.7.10
myself@localhost:~$

Python2.6 - проблемный

myself@localhost:~$ which python2.6
python2.6 is /opt/local/bin/python2.6
python2.6 is /usr/bin/python2.6
python2.6 is /usr/bin/python2.6
python2.6 is /opt/local/bin/python2.6
myself@localhost:~$ python2.6
Python 2.6.9 (unknown, Aug 24 2015, 17:53:21)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> myself@localhost:~$ myself@localhost:~$ myself@localhost:~$ Python 2.6.9
myself@localhost:~$

Python2.5 - это работает!

myself@localhost:~$ which python2.5
python2.5 is /usr/bin/python2.5
python2.5 is /usr/bin/python2.5
myself@localhost:~$ python2.5
Python 2.5.6 (r256:88840, Jul 31 2011, 19:30:45)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
myself@localhost:~$
myself@localhost:~$
myself@localhost:~$ python2.5 --version
Python 2.5.6
myself@localhost:~$

Запуск zshили cshкажется, работает нормально:

Zsh

myself@localhost:~$ zsh
localhost% which python3.4
/opt/local/bin/python3.4
localhost%
localhost% python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> %                                                                           
ra%
ra%
ra% python3.4 --version
Python 3.4.3
localhost% exit
myself@localhost:~$

Csh

myself@localhost:~$ csh
Running csh
[localhost:~] myself% which python3.4
/opt/local/bin/python3.4
[localhost:~] myself% python3.4
Python 3.4.3 (default, Aug 24 2015, 17:25:38)
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> exit()
>>> [localhost:~] myself%
[localhost:~] myself%
[localhost:~] myself% python3.4 --version
Python 3.4.3
[localhost:~] myself% exit
exit

Мое мышление до сих пор:

Тот факт, что поведение для трех терминалов выглядит одинаково, заставляет меня думать, что это не проблема терминала.

Тот факт, что он работает в Zsh и Csh, но не в Bash, заставляет меня думать, что это проблема оболочки.

Тот факт, что все версии, которые ломаются (3.4, 2.7, 2.6), установлены в /opt/local/bin/(обычное место установки MacPorts), а версия, в которой работает (2.5), установлена /usr/bin/, заставляет задуматься о том, есть ли какое-то недавнее обновление MacPorts (возможно, оно поднялось до За 20 дней до 24 августа 2015 г. ??) возможно, что-то сломалось, из-за чего Python и Bash не работают вместе!


3
Предположение - питоны macports не передаются с помощью GNU readline - попробуйте установить pyXX-readline
Mark

Помимо решения @Mark и , пока проблема не будет устранена, при выходе из питона с exit() , quit()или control Dтипа resetв строке (он не будет вторит обратно к терминалу) и ждать , пока не появится окно снова появляется.
fd0

@Mark: это сработало! Если ты напишешь это как ответ, я приму это. Огромное спасибо!
jvriesem

Ответы:


10

Кажется, есть проблема с последними сборками Python для Macports, см. Эту ошибку

Обходной путь должен установить pyXX-readline (py35-readline был создан только для этой ошибки)

Другой способ - установить Python, добавив вариант + readline.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.