第一次和第二次执行的程序运行方式不同。为什么呢?

时间:2017-12-25 22:15:32

标签: python

我在Mac上使用终端运行python 2.7程序。如果我打开终端并运行程序,它的执行方式与我在同一终端窗口中第二次运行程序时的执行方式不同。什么可能导致这样的问题?

以下是我正在使用的代码。第print bg("grey_50")行在第一次执行程序时不打印任何内容,但在第二次执行时正确打印一条灰线。在BOTH执行时,for函数运行相同且正确。 为什么灰线仅在我第二次运行程序时打印?

uses_color = "True"

if uses_color == "True":
    from colored import fg, bg

if uses_color == "True":
    print bg("grey_50")
    for i in range(44):
        print bg("grey_100")

作为旁注,第二节和第三节之间也有一些代码,每次运行函数时都能正常工作。

此外,请注意,print bg("grey_50")行和 print bg("grey_100") 行都使用彩色模块,但只有后两者一致。

链接到彩色https://github.com/dslackw/colored

1 个答案:

答案 0 :(得分:5)

这与您的程序或重复运行无关。问题在于滚动时终端的行为。仅在滚动时,终端使用当前背景颜色填充整行。

首次运行时,如果当前编辑提示足够高,您将看到根本没有打印任何颜色。在下一次运行时,显示屏会滚动,终端会检查要清除的颜色 - 当前活动的背景颜色。我的默认终端背景不是纯白色(代码中的grey_100)所以我在第一次运行时看不到任何不同。

如果您真的想要以背景颜色打印整行,请询问终端宽度并打印一行空格。

from colored import fg, bg, attr
import os

# from https://stackoverflow.com/questions/566746/how-to-get-linux-console-window-width-in-python
rows, columns = os.popen('stty size', 'r').read().split()

columns = int(columns)

print bg("red")+(columns * ' ')
for i in range(10):
    print bg("yellow")+(' ' * columns)
print attr('reset')