2016-09-05 83 views
0

我一直在玩OSX终端(bash v.3.2.57,Yosmite)的ansi颜色。奇怪的ansi颜色bevahiour在终端

一旦我填满了一个终端窗口(如在它向下滚动时),我有背景色行为的问题。

背景颜色将填充右侧的空白区域,同时也“跳过”一条线(请参见图片)。它按照我的需要工作,直到输出使窗口滚动。如果我使用“清除”命令,输出将会很好,直到输出再次填满终端窗口。

下面的代码只是获取颜色的不同组合(我为此问题截断了一点)。

我有一个感觉终端是责怪,而不是蟒蛇,因为输出最初工作。谁能解释这种行为?干杯。

#coloured text in terminal 
#ANSI escape sequences 

std_txt = '\033[0m' 

print('colour test' +'\n') 
print('   X in 033[0;Xm') 
for x in range(30,35): 

    print ''.join(["\033[0;",str(x), 'm']) + 'test' +'\t' + str(x) 

print std_txt +'\n' + ('end') 

print('colour test 2' +'\n') 
print('   X in 033[0;30;Xm') 
for x in range(40,45): 

    print ''.join(["\033[0;30;",str(x), 'm']) + 'test' +'\t' + str(x) 

print std_txt +'\n' + ('end') 

enter image description here

PS:我的意思是通过填充一个终端窗口或滚动什么。 如果你的终端窗口是80x24,填满它将使用24行,大于25会使它滚动。对不起,我发现很难在问题中解释这一点。

+1

它看起来像你有一个'newline'问题。它出现在每行文本之后的换行/换行导致文本之后的行的其余部分在滚动后的下一行上打印。我不用python编写代码,除了建议寻找是否有方法来重新排列将新行传递给'print'的方式之外,我没有什么帮助。如果它应该是'end',那么''\ n''(不知道,只是从上面的代码中猜测)。 –

+0

是的,我赞同滚动后的一些变化,这很奇怪。埃里克的建议是每次迭代重置它。 – der0keks

回答

1

问题是你没有在换行符之前重新设置颜色,所以终端试图有帮助。

变化

print ''.join(["\033[0;30;",str(x), 'm']) + 'test' +'\t' + str(x) 

要:

print ''.join(["\033[0;30;",str(x), 'm']) + 'test' +'\t' + str(x) + std_txt 
+0

感谢Eric,这种调整使得代码按照我的意愿行事! – der0keks