【问题标题】:Python - sys.stdout.flush() on 2 lines in python 2.7Python - sys.stdout.flush() 在 python 2.7 中的 2 行
【发布时间】:2017-01-03 19:18:47
【问题描述】:

我正在使用 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 只跳转到第二行的开头,并从下一个打印开始..

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

这样它只会刷新两行:

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

我希望有人能理解我的意思。

【问题讨论】:

    标签: python python-2.7 stdout flush sys


    【解决方案1】:

    要从当前行转到上一行,必须将其写入标准输出\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

    https://stackoverflow.com/a/12586667

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2019-08-13
      相关资源
      最近更新 更多