Python - sys.stdout.flush() 在 python 2.7 中的 2 行

Python - sys.stdout.flush() on 2 lines in python 2.7

我正在用 python 2.7

写作

我有以下代码:

a = 0
b = 0
while True:
    a += 1
    b += 1
    print str(a)
    print str(b)

输出如下:

1
1
2
2
3
3
4
....

并想用 stdout.flush() 刷新这两行。代码看起来像这样,但它不起作用..

import sys

a = 0
b = 0
while True:
    a += 1
    b += 1
    sys.stdout.write(str(a)+"\n")
    sys.stdout.write(str(b)+"\r")
    sys.stdout.flush()

这会产生如下输出:

1   #1
2   #1   ->#2
3          #2   ->#3
4                 #3   ->#4
...

我知道这是因为\r只跳到第二行的开头,并从下一个打印开始..

如何将光标设置到第一行而不是第二行的开头?

这样它只会刷新 2 行:

n  #1 ->#2  ->#3  ->#4  ->#.....
n  #1 ->#2  ->#3  ->#4  ->#.....

希望有人能明白我的意思。

从当前行转到上一行,这必须写在标准输出上\x1b[1A

CURSOR_UP_ONE = '\x1b[1A' 

要擦除行 \x1b[2K 的内容必须写入标准输出。

ERASE_LINE = '\x1b[2K'

这样你就可以到上面一行并覆盖那里的数据。

data_on_first_line = CURSOR_UP_ONE + ERASE_LINE + "abc\n"
sys.stdout.write(data_on_first_line)

data_on_second_line = "def\r"
sys.stdout.write(data_on_second_line)
sys.stdout.flush()

了解更多详情http://www.termsys.demon.co.uk/vtansi.htm#cursor