2016-07-08 76 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