终端输出变黑

时间:2014-07-15 08:48:59

标签: python linux terminal

简短版本:我有一个程序在无限循环中向终端打印连续的整数。在某些时候,终端变黑了,没有输出可见,但我仍然可以执行命令。

详细

我在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终端执行过夜(我们在几分钟内达到数十万分钟),终端只显示黑色。程序仍在运行,并显示新行,但看不到任何内容。我杀了程序,但终端,包括命令提示符,是黑色的。我可以输入命令,但它们可以工作,但没有输出可见。

为什么会这样?

我在评论中提供的一些信息:

  • 程序使用的内存(由top报告)保持不变且低。
  • 我可以在终端上打印荒谬的大号而不会出现这种情况。我打印的最大数字有10 ^ 10 ^ 6位数(当然,终端忘记了它的开头,只显示了最后的数字,但它的log10是1246124)。我的计划不可能走得那么远,这将需要数百万倍的宇宙年龄。
  • 另外一点,如果我尝试打印更大的东西,它似乎冻结,使用CPU但没有任何输出(原始输出在那里,但看不见)

1 个答案:

答案 0 :(得分:0)

似乎输出正在缓冲。您应该尝试将打印更改为

print ct, "\n"

print ct
sys.stdout.flush()

或者你可以通过调用-u参数(参见https://docs.python.org/2/using/cmdline.html#cmdoption-u)或设置PYTHONUNBUFFERED=1 env变量(参见https://docs.python.org/2/using/cmdline.html#envvar-PYTHONUNBUFFERED)来告诉python不缓冲输出