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


11

在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)
>>> [~]: 

为什么要通过macports安装Python?El Cap随附了Python v2.7.10,我认为优胜美地...从Mac Ports获得的特别的东西吗?
本杰明·肖尔尼克

好吧,请使用2.7.mac附带的任何东西。不接触系统python(Unix上的标准问题),运行2.7,其中编译了自定义GIS选项,并为这些软件包提供了mgmt软件包,同时运行了3.4。但是,您应该这样做的真正原因是不要对系统python进行fsck。
安德鲁·贝克

python应用程序是否在进行任何类型的窗口管理?(例如,使用Curses,NCurses等)
Benjamin Schollnick

没有应用程序,只需键入python然后输入ctrl-d
Andrew Backer 2015年

Answers:


12

MacPorts中存在一个有关此问题的打开的错误:

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

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

sudo port uninstall python27
sudo port install python27 +readline

9
该死,感谢您找到该错误报告。FWIW,无法卸载python27(通常有太多软件包依赖于此),因此您应该重新构建。运行sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline。如果您的本地树已过期,那么它将没有+ readline变体;该selfupdate会解决这个问题。
安德鲁·贝克

8

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

stty sane

其次是 controlJ

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

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

进一步阅读


stty echo似乎解决了这个问题(stackoverflow.com/questions/32475928/python3-messes-up-terminal)。不确定是否可以解决所有问题。我认为我的python有点问题,因为语法错误要求我手动点击换行符以开始输入新命令,而事实并非如此。
安德鲁·贝克

尽管这不能解决问题,但至少可以让我在事后解决它。就我而言,这足够好了。如果有任何方法可以找出原因,我很想知道。
安德鲁·贝克尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.