2017-04-12 156 views
5

有沒有辦法讓python在最後一行之上的命令行中打印某些內容?或者,與我想實現的類似,保持最後一行不變,即不覆蓋它。在最後一行打印行之上的Python輸出

這樣做的目標是讓命令行中的最後一行成爲狀態/優先級欄。

輸出例如:

File 1 processed 
(0.1% Completed) 

下一頁刷新:

File 1 processed 
File 2 processed 
(0.2% Completed) 

下一頁刷新:

File 1 processed 
File 2 processed 
File 3 processed 
(0.3% Completed) 

回答

4
from time import sleep 
erase = '\x1b[1A\x1b[2K' 

def download(number): 
    print(erase + "File {} processed".format(number)) 

def completed(percent): 
    print("({:1.1}% Completed)".format(percent)) 

for i in range(1,4): 
    download(i) 
    completed(i/10) 
    sleep(1) 

作品在我的Python 3.4,最終輸出是:

File 1 processed 
File 2 processed 
File 3 processed 
(0.3% Completed) 

如果你想了解更多關於終端轉義碼嘗試:https://en.wikipedia.org/wiki/ANSI_escape_code

根據要求,e xample用空間:

from time import sleep 
erase = '\x1b[1A\x1b[2K' 

def download(number): 
    print(erase*2 + "File {} processed".format(number)) 

def completed(percent): 
    print("\n({:1.1}% Completed)".format(percent)) 

print("\n(0.0% Completed)") 
for i in range(1,5): 
    download(i) 
    completed(i/10) 
    sleep(1) 

最終輸出是:

File 1 processed 
File 2 processed 
File 3 processed 
File 4 processed 

(0.4% Completed) 
+0

如果我想在處理的文件塊和百分比之間留一個空行,該怎麼辦?我認爲這將是相當棘手的 – PyCV

+0

如果我理解正確,完全沒有,我已經添加了一個答案的例子。 – mucka

1

看一看的\r命令。這可以做到這一點。

for i in range(2): 
    print '\rFile %s processed' % i 
    print '(0.%s%% Completed)' % i, 

輸出是:

File 0 processed 
File 1 processed 
(0.1% Completed) 
+0

這工作,但只是爲這種特殊情況下。 Image我有幾個來自不同進程的輸出(多處理模塊),我想跟蹤高級百分比。 – PyCV

+0

@PyCV如果你有多個進程,你想協調顯示,他們都應該把他們的輸出發送到一個地方去做。如果你正在做一個多處理池,'imap_unordered'將是一個好方法。 – tdelaney