2017-04-12 5 views
5

最後の行の上のコマンド行に何かを印刷する方法はありますか?または、達成したいのと同様に、最後の行をそのまま残してください。つまり、上書きしないでください。最終印刷行の上の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) 

ワークス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, 

出力がある:私のpythonで

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

これは動作しますが、ちょうどこの特定のケースのために。 Image私は、さまざまなプロセス(マルチプロセッシングモジュール)からいくつかの出力を得て、私は進歩率を追跡したいと思います。 – PyCV

+0

@PyCV複数のプロセスがあり、表示を調整したい場合、すべての出力を1つの場所に送信して実行する必要があります。あなたがマルチプロセッシングプールを行っていたなら、 'imap_unordered'は良い方法でしょう。 – tdelaney

関連する問題