【发布时间】:2014-07-15 08:48:58
【问题描述】:
简短版:我有一个程序在无限循环中向终端打印连续整数。在某些时候,终端变黑了,看不到任何输出,但我仍然可以执行命令。
详情:
我在 PCG 中阅读了this answer,并想在 Python 中尝试一下。这里是:
#!/bin/python2
class Dier(object):
def __init__(self):
global ct
ct += 1
print ct
def __del__(self):
Dier()
ct = 0
Dier()
这个程序无限循环,打印每一步的迭代次数。从 Ubuntu gnome 终端执行过夜(我们在几分钟内达到数百万),终端只显示黑色。程序仍在运行,并出现新行,但什么都看不到。我杀死了程序,但终端,包括命令提示符,是黑色的。我可以输入命令,它们可以工作,但看不到任何输出。
为什么会这样?
我在 cmets 中提供的一些信息:
- 程序使用的内存(由 top 报告)保持不变且较低。
- 我可以在终端上打印非常大的数字而不会出现这种情况。我打印的最大数字有10^10^6位(当然终端忘记了开头,只显示最后一位,但它的log10是1246124)。我的程序不可能走那么远,那将花费数百万倍于宇宙的年龄。
- 补充说明,如果我尝试打印比这更大的东西,它似乎会冻结,使用 CPU 但没有任何输出(虽然原始输出在那里,但不可见) .
【问题讨论】:
-
我对你的断言“新行出现,但什么都看不到”有点困惑......如果新行出现,那么它们是可见的。相反,如果什么都看不到,那么你怎么知道出现了新行呢?
-
@twalberg 屏幕是黑色的,但我可以看到我正在书写的光标位置。
-
“终端”究竟是什么意思? xterm?侏儒终端?或者你的意思是你的文本控制台?还是您的意思是插入 PC 串行端口的 IBM-3101?
-
我认为这与终端缓冲区和 python 输出缓冲区有关。您是否尝试过每次调用 sys.stdout.flush() ?有趣的代码...
-
我很确定这是一个 gnome-terminal 的东西,而不是 python 的东西。在 gnome-terminal 中从 python 脚本打印大量日志后,我经历了这一点。当我滚动时,文本通常会重新出现,这显然意味着错误是 post-sys.stdout。