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

And*_*rew 11 terminal bash python macos

在 os-x 终端中运行 python repl (2.7.10) 并退出后,终端不再回显输入,并且发生了一些其他奇怪的事情。如果我python再次运行and 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`
Run Code Online (Sandbox Code Playgroud)

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

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

B. *_*ach 12

MacPorts 中有一个关于此问题的开放错误:

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

它说用“+readline”选项安装python可以解决这个问题,我自己做了验证。

sudo port uninstall python27
sudo port install python27 +readline
Run Code Online (Sandbox Code Playgroud)

  • 该死,感谢您找到那个错误报告。FWIW,无法卸载python27(通常依赖它的包太多),因此您应该重建。运行`sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline`。如果你的本地树已经过时了,那么它就没有 +readline 变体可用;`selfupdate` 会解决这个问题。 (9认同)

Tho*_*key 8

终端模式由您的应用程序设置为 raw 或 cbreak,当异常退出时,模式不会恢复。特别是,在这种情况下,将Enter键(control/M aka 回车)映射到换行符(control/J aka行)的功能通常被禁用。您可以通过输入解决退货问题

stty sane
Run Code Online (Sandbox Code Playgroud)

其次是 controlJ

这至少可以让您再次输入命令,尽管诸如此类的编辑字符backspace可能不会分配给它们的常用功能。

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

进一步阅读