2016-07-08 88 views
0

我想编写一个函数,它将在控制台线上输出消息。该消息应该保留,直到我不再使用新消息再次调用相同的函数。此时,新消息应该出现在替换旧消息的同一行上。打印在同一行; mantain直到被新​​字符串替换

import sys 
from time import sleep 

def printSameLine(my_message): 

    sys.stdout.write("Message: %s \r" % (my_message)) 
    sys.stdout.flush() 

    return 

for i in range(1,10): 

    printSameLine(str(i)) 
    sleep(4) 

这似乎并没有获得希望的结果

+0

该代码似乎是正确的,从我的理解的问题。解释什么是“期望的结果” –

+0

只是将'sys.stdout.write(“Message:%s \ r”%(my_message))''改为'sys.stdout.write(“\ rMessage:%s”%(my_message ))'。 –

回答

1

sys.stdout.flush不清除线 - 它清除缓冲器(换言之打印就行的所有内容)。你可以做的是打印一长串\b以清除当前行,但它不会回溯到换行符。尝试:

sys.stdout.write('\b'*100) 
sys.stdout.write("Message: %s \r" % (my_message)) 

否则,你也应该得到良好的结果只是把\r在你写的开始:

sys.stdout.write("\rMessage: %s" % (my_message)) 

但这不会好,如果你的更新消息是比以前更短:

sys.stdout.write("Hi there") 
sys.stdout.write("\r12") 
#Output is 
12 there 
+0

'sys.stdout.write(“\ rMessage:%s”%(my_message))'似乎不起作用。它每两个循环打印一条消息... – CptNemo

+0

@CptNemo它适用于我 –

0

如果没关系使用打印语句,您可以通过获得在Python 3.x中所期望的结果:

print("Message " + my_message + "\r", end='') 

或在Python 2追加一个逗号:

print "Message " + my_message + "\r", 

所以你基本上可以做到:

import sys 
from time import sleep 

def printSameLine(my_message): 
    print("Message: %s \r" % (my_message), end='') 
    return 

for i in range(1,10): 
    printSameLine(str(i)) 
    sleep(4) 
0

您可以阿洛斯只调用打印与更新的消息之前清除与下面的代码控制台。但是,如果您在控制台中有其他信息行,则必须重新打印。

os.system('cls' if os.name=='nt' else 'clear') 
+0

不要以为这就是OP所要求的。 – SiHa

+0

@SiHa从我所理解的OP中想要更新的消息出现在他的控制台的同一行上。如果是这样,那么清除控制台并重新打印更新的消息将会产生期望的“视觉”效果。 –

+0

虽然这有点激烈 - 控制台上可能还有其他信息。 – SiHa