为什么这段代码似乎间歇性地失败?

时间:2015-07-06 17:43:41

标签: python-2.7 ipython enthought canopy ansi-escape

我有这段不雅的代码,应该打印出类似于控制台的内容:

goodput

CSI='\x1B['
reset=CSI+'m'

for i in range(len(recs)):
    print CSI+'36;40m' + str(i+1) + '\t\t', recTitles[i], CSI+'33;40m' + recReleaseYears[i] + reset
    print CSI+'35;40m' + u'\u2588' + 'IMDb Rating:\t' + reset, recRatings[i], '('+recVotes[i]+' votes)'
    print CSI+'34;40m' + u'\u2588' + 'Genre:\t\t' + reset, CSI+'36;1m' + recGenres[i] + reset
    print CSI+'33;40m' + u'\u2588' + 'Cast:\t\t' + reset, recCast[i]
    print CSI+'32;40m' + u'\u2588' + 'Director:\t' + reset, recDirectors[i]
    print CSI+'36;40m' + u'\u2588' + 'Summary:\t' + reset, insertTabs(recPlots[i]) + reset
    print CSI+'31;40m' + u'\u2588' + 'IMDb Link:\t' + reset, CSI+'34;1m' + recIMDbLinks[i] + '\n' + reset

但是,大部分时间我都会这样: badput

我不确定我的代码问题出在哪里,因为偶尔会按预期工作,我会得到正确的输出(这让我发疯了)。

我使用Enthought Canopy作为我的IDE。

2 个答案:

答案 0 :(得分:1)

问题可能出在终端模拟器中,重置标签字符后的颜色(这将是一个错误)。如果更改选项卡以便只写入空格,则可以解决这种可能性。

顺便说一句,如果您的终端设置为使用硬标签,那么您可能会遇到其他一些意外行为(选项卡区域将跳过而不是彩色) 。这是一个截图(用脚本来演示): enter image description here

答案 1 :(得分:0)

我仍然不确定问题可能是什么,但在sys.stdout.flush()循环的开头添加for似乎已经解决了问题。

CSI='\x1B['
reset=CSI+'m'
import sys

for i in range(len(recs)):
    sys.stdout.flush()
    print CSI+'36;40m' + str(i+1) + '\t\t', recTitles[i], CSI+'33;40m' + recReleaseYears[i] + reset
    print CSI+'35;40m' + u'\u2588' + 'IMDb Rating:\t' + reset, recRatings[i], '('+recVotes[i]+' votes)'
    print CSI+'34;40m' + u'\u2588' + 'Genre:\t\t' + reset, CSI+'36;1m' + recGenres[i] + reset
    print CSI+'33;40m' + u'\u2588' + 'Cast:\t\t' + reset, recCast[i]
    print CSI+'32;40m' + u'\u2588' + 'Director:\t' + reset, recDirectors[i]
    print CSI+'36;40m' + u'\u2588' + 'Summary:\t' + reset, insertTabs(recPlots[i]) + reset
    print CSI+'31;40m' + u'\u2588' + 'IMDb Link:\t' + reset, CSI+'34;1m' + recIMDbLinks[i] + '\n' + reset