我有这段不雅的代码,应该打印出类似于控制台的内容:
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
我不确定我的代码问题出在哪里,因为偶尔会按预期工作,我会得到正确的输出(这让我发疯了)。
我使用Enthought Canopy作为我的IDE。
答案 0 :(得分:1)
问题可能出在终端模拟器中,重置标签字符后的颜色(这将是一个错误)。如果更改选项卡以便只写入空格,则可以解决这种可能性。
顺便说一句,如果您的终端设置为使用硬标签,那么您可能会遇到其他一些意外行为(选项卡区域将跳过而不是彩色) 。这是一个截图(用脚本来演示):
答案 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