我目前正在尝试在linux上使用带有python的editline,而不是readline。总的来说它有效,除了我得到这种行为。这是我终端的逐字记录
bash> python
Python 2.7.2 (default, Feb 20 2015, 13:19:18)
[GCC 4.6.3] on linux3
Type "help", "copyright", "credits" or "license" for more information.
1 >>>
2 >>> hello
3 >>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'hello' is not defined
4
在1中,我按回车键。它似乎工作。在2我使用一个未定义的名称只是为了测试。请注意,在3中我在回溯之前得到一个提示,而在4中我没有提示。在实践中,打印顺序全部搞砸了。如果我使用print
,会发生类似的事情 >>> print "hello"
>>> hello
现在更重要的是。当我用^ D或quit()退出python可执行文件时,我得到了这种情况
1 ^D>>>
2 bash> bash> bash> bash> bash> bash> bash> bash> bash> bash> bash> bash> The program 'hello' can be found in the following packages:
* hello
* hello-debhelper
Try: sudo apt-get install <selected package>
3 bash> bash> bash> bash> bash> bash> bash>
in 1我按下控制D.注意python提示再次显示。我进入bash提示符。现在,在2,如果我多次按Enter键,我会一次又一次得到提示。如果我输入&#34;你好&#34;然后输入我不会得到任何字符的回声。同样在3.
如果我使用&#34;重置&#34;我将终端恢复到一个理智的状态,但重点是python,editline或他们的交互以某种方式搞砸了终端。我在错误地取消初始化时也会使用ncurses看到这种行为,但我不确定可能已被更改的终端设置方面的根本原因。
我正在尝试调试并修复问题,所以我会重视有关在终端级别发生的事情的任何信息,这会破坏它。一旦我知道哪个例程正在造成损害,我就可以更详细地跟踪问题。
答案 0 :(得分:0)
显然python/editline
组合正在弄乱输出和probablay错误流。
我的猜测是,某人错误地将缓冲模式修改为输出流的行缓冲模式(或全缓冲模式)。
通常,错误流处于非缓冲模式。 Probabaly这就是为什么你看到错误信息,而不是信息(标准输出)
当终止python
内核自动刷新标准输出缓冲区的内容时,您可以看到所描述的最终消息。
好好弄清楚你需要调试python解释器到底发生了什么。