以交互方式运行 Python 后,OS-X 终端行为异常

以交互方式运行 Python 后,OS-X 终端行为异常

在 os-x 终端中运行 python repl (2.7.10) 并退出后,终端不再回显键入的输入,并且还会发生一些其他奇怪的事情。如果我python再次运行exit(),则终端似乎已恢复。我现在只需关闭选项卡并打开一个新选项卡,因此我还没有对此进行广泛的测试。

我猜这与终端设置有关,但这是最近发生的事情,我没有改变我记得的任何东西。macports如果与某些控制台库的依赖关系不匹配有关,则 Python 会随安装一起安装。2.7.10 是在不久前安装的,安装后没有发生这种情况。

关节裂开并打开terminal

[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>>       *(press ctrl-d, the 2nd >>> is strange)
[~]:            *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`

此外,再次运行 python 并得到ctrl-d以下输出结果:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 

答案1

MacPorts 中存在与此问题相关的一个未解决的错误:

https://trac.macports.org/ticket/48807

它说使用“​​+ readline”选项安装 python 可以解决问题,我自己也验证了这一点。

sudo port uninstall python27
sudo port install python27 +readline

答案2

终端模式由应用程序设置为 raw 或 cbreak,当异常退出时,模式不会恢复。特别是,将键Enter(control/M 又称回车键)映射到新队在这种情况下,通常会禁用(control/J 即换行符)。您可以通过输入以下代码修复回车问题:

stty sane

其次是controlJ

这至少可以让您再次输入命令,尽管诸如编辑字符backspace可能未分配其通常的功能。

有些人可能还建议使用该reset命令,但给出的症状与该程序的功能无关。

进一步阅读

答案3

这对我有用(使用 OSX 和 pyenv):

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 2.7.11

来源:https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l

相关内容