终端不再回声的根本原因是什么?

时间:2015-02-20 12:46:45

标签: python linux terminal

我目前正在尝试在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看到这种行为,但我不确定可能已被更改的终端设置方面的根本原因。

我正在尝试调试并修复问题,所以我会重视有关在终端级别发生的事情的任何信息,这会破坏它。一旦我知道哪个例程正在造成损害,我就可以更详细地跟踪问题。

1 个答案:

答案 0 :(得分:0)

显然python/editline组合正在弄乱输出和probablay错误流。

我的猜测是,某人错误地将缓冲模式修改为输出流的行缓冲模式(或全缓冲模式)。

通常,错误流处于非缓冲模式。 Probabaly这就是为什么你看到错误信息,而不是信息(标准输出)

当终止python内核自动刷新标准输出缓冲区的内容时,您可以看到所描述的最终消息。

好好弄清楚你需要调试python解释器到底发生了什么。