交互式Python解释器在后台运行

交互式Python解释器在后台运行,python,linux,bash,Python,Linux,Bash,在后台启动交互式python控制台时,我遇到了一个奇怪的问题。从后台恢复解释器后,它不会显示我输入的任何文本(即,它只显示>>>提示符,但它会解释我写的任何内容。按[enter]键在同一行上创建另一个>>>提示符) 重现问题的简单方法是键入: python & fg 如果在前台启动程序,将其置于后台,然后将其返回前台,则不会出现此问题: python [ctrl-z] bg fg import termios attr = termios.tcgetattr(1) attr[3] =

在后台启动交互式python控制台时,我遇到了一个奇怪的问题。从后台恢复解释器后,它不会显示我输入的任何文本(即,它只显示>>>提示符,但它会解释我写的任何内容。按[enter]键在同一行上创建另一个>>>提示符)

重现问题的简单方法是键入:

python &
fg
如果在前台启动程序,将其置于后台,然后将其返回前台,则不会出现此问题:

python
[ctrl-z]
bg
fg
import termios
attr = termios.tcgetattr(1)
attr[3] = attr[3] | termios.ECHO
termios.tcsetattr(1, termios.TCSANOW, attr)

如果你想知道为什么你想在后台启动一个交互式解释器,考虑下面的场景:

我有一个需要很长时间运行的模拟,但在它完成后,我想与结果进行交互。于是,我开始了这个项目:

python -i simulation.py &
fg #(after it's finished running)

简单的解决方案是在前台启动,将其移动到后台,然后再将其移动到前台,但我只是想知道为什么会发生这种情况。

在将解释器移到前台后,考虑执行以下命令以强制终端回显模式:

python
[ctrl-z]
bg
fg
import termios
attr = termios.tcgetattr(1)
attr[3] = attr[3] | termios.ECHO
termios.tcsetattr(1, termios.TCSANOW, attr)

您是否安装了
readline
模块?我在
readline
中看到过类似的行为,而它是基于BSD
libedit
而不是GNU
libreadline
构建的。虽然不是几年前的事,…哪个发行版/版本,哪个Python版本,以及,在我们使用它的时候,哪个shell和终端程序和版本?还有,
simulation.py
是否使用
termios
tty
诅咒
,或者类似的东西,或者向终端写入二进制数据?我正在使用Ubuntu 13.04,Python 2.7和Bash。脚本不会执行您列出的任何操作,但我不确定这是否相关,因为即使没有脚本(python&),您也可以重现问题。FWIW,python3也有同样的问题。Bash版本4.2.45(1)-release(x86_64-pc-linux-gnu)知道为什么终端ECHO属性会被取消设置吗?基本上与您的解决方案相同:导入操作系统;操作系统(“重置”)或操作系统(“正常”)。但仍然不确定为什么本地echo会被禁用。同样有趣的是,从解释器外部执行reset或stty-sane(在bg中使用python)并不能解决问题。