2016-01-09 5 views
5

私はプログレスバーを書いています。これはHow to animate the command line?です。私はPycharmを使用し、Run Tool Windowでこのファイルを実行します。Python3:print(somestring、end = ' r'、flush = True)には何も表示されません。

import time 
def show_Remaining_Time(time_delta): 
    print('Time Remaining: %d' % time_delta, end='\r', flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

ただし、この.pyファイルを実行するとコードには何も表示されません。私は間違って何をしていますか?


私はジョガーの提案が、私はprint機能を使用する場合、それはまだ動作していないを試してみました。

ただし、次のスクリプトは期待どおりに機能します。

  1. なぜ標準出力動作しますが、印刷()ではない:

    import time 
    import sys 
    def show_Remaining_Time(time_delta): 
        sys.stdout.write('\rtime: %d' % time_delta) # Doesn't work if I use 'time: %d\r' 
        sys.stdout.flush() 
    if __name__ == '__main__': 
        count = 0 
        while True: 
         show_Remaining_Time(count) 
         count += 1 
         time.sleep(1) 
    

    私は今、2つの質問を持っています。

  2. How to animate the command line?が私の場合は最初に書き込む必要がありますが、最後に\rを追加することを提案するのはなぜですか?

+1

インタラクティブなインタプリタでうまく動作します。あなたは何か奇妙なシェルで、IDLEシェルを実行していますか? – ShadowRanger

+0

@ShadowRanger PycharmのRun Tool Windowで実行しています。私が 'end = '\ r''を渡さなければ、それは普通の方法で印刷されます。しかし、私は同じ行を更新し続けたいと思います。 – spacegoing

+0

ええ、PyCharmの実行ウィンドウは通常の端末ではありません。あなたが望むかもしれない方法でキャリッジリターンを処理しません。通常のコマンドプロンプトで実行します。 – ShadowRanger

答えて

0

問題は、最後に '\ r'が印刷した行をクリアすることです。

import time 
def show_Remaining_Time(time_delta): 
    print("\r") 
    print('Time Remaining: %d' % time_delta, flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

このようにして、最初にラインをクリアしてから、希望のディスプレイを印刷して、スリープの間、画面に表示します。

+2

ほとんどの端末では '\ r'は何もクリアしていないことに気付いています。カーソルを移動しますが、そこにあるものを上書きするにはさらに出力が必要です。また、あなたのプリントの自動改行を無効にしているわけではないので、新しい出力にすべての出力を印刷するのが正味の効果です。明示的な '' \ r ''' print'は何もしません。 – ShadowRanger

+0

他の問題を除いて(end = ''を使用していないので)、これは私のためのトリックでした。 – arielnmz

+0

期待通りに動作させるには 'print( '\ r'、end = '')'と 'print( 'output'、end = ''、flush = True)'を使用しなければなりませんでした。しかし、良い出発点をありがとう! –

0
this method u can print in same command line: 
import time 
def show_Remaining_Time(time_delta): 
    print(' \r%d:Time Remaining' % time_delta, end = '',flush=False) 

if __name__ == '__main__': 
    count = 0 
    while True and count < 10: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1)