输出到同一行覆盖之前

时间:2014-10-27 08:58:03

标签: python

如何通过覆盖NTP服务器先前收到的Timing(倒计时)来输出到同一行。如下图所示,每隔一个时序在下一行接收。

13:35:01

13:35:00

13:34:59

13:34:58

13:34:57

13:34:56

我希望时间应该在同一行中收到清除前一个。

4 个答案:

答案 0 :(得分:20)

你可以use the "return"-character \r to return to the beginning of the line。在Python 2.x中,您必须使用sys.stdout.writesys.stdout.flush代替print

import time, sys
while True:
    sys.stdout.write("\r" + time.ctime())
    sys.stdout.flush()
    time.sleep(1)

在Python 3.3中,您可以使用print函数,endflush参数:

    print(time.ctime(), end="\r", flush=True)

但请注意,这样您只能替换屏幕上的最后一行。如果你想要一个" live"在一个更复杂的仅限控制台的UI中,您应该查看curses

import time, curses
scr = curses.initscr()
scr.addstr(0, 0, "Current Time:")
scr.addstr(2, 0, "Hello World!")
while True:
    scr.addstr(0, 20, time.ctime())
    scr.refresh()
    time.sleep(1)

答案 1 :(得分:0)

我正在使用python 2.7

python --version
Python 2.7.12 :: Anaconda 4.1.1 (64-bit)

我正在使用以下函数作为钩子来显示下载进度,使用urllib.urlretrieve

def hook(bcount , bsize, tsize ):
    str = "[ %3d%% of %10d] \r" % (bcount * bsize * 100/tsize , tsize)    
    print str,

urllib.urlretrieve (url, file_name, hook)

说明:\ r \ n将光标放在行的开头,而逗号则避免在新行中打印,如果每个打印的字符数相同,这样就可以了。

如果你对urllib和我正在使用的钩子感到好奇,你会找到文档https://docs.python.org/2/library/urllib.html

答案 2 :(得分:0)

这将像冠军一样工作:

print("This text is about to vanish - from first line", end='')
print("\rSame line output by Thirumalai")

输出:

  
    

Thirumalai从第一行输出相同的行

  

答案 3 :(得分:0)

在python3中工作

但仅适用于Windows

import os
import time
while True:
    print(time.ctime())
    time.sleep(1)
    os.system('cls')