2016-04-09 9 views
4

私の問題は、Pythonコンソールで前回の印刷行を上書き/消去できるようにすることです。この質問は(私がすべてでは何も出力しないため答えは、正しいものとしてマーク)が ある非常に同じコードで、何回も(例えばPython - Remove and Replace Printed itemsを)頼まれました:前のコンソール行の上書き/クリア

for i in range(10): 
    print("Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.write("\033[F") # Cursor up one line 
    sys.stdout.write("\033[K") # Clear to the end of line 

私は(出力を得ますPython IDLEで):

Loading 
[F[KLoading. 
[F[KLoading.. 
[F[KLoading... 
[F[KLoading.... 
[F[KLoading..... 
[F[KLoading...... 
[F[KLoading....... 
[F[KLoading........ 
[F[KLoading......... 
[F[KLoading.......... 
[F[K 

アイデアはありますか?私はたくさんのグーグルで探検しました。何も印刷しないか、上書きしません。

これが役に立ちましたら、私はWindows 8.1とPython 3.51を実行しています。コードトラフcmdを実行しても影響はありません。

また、sys.stdout.flush()を追加することは役に立ちません。

+0

はあなたが確認しました:http://stackoverflow.com/questions/27575929/ansi-escape-sequences-arent-printed-to-stdout-on-windows – Zorgmorduk

+0

シーケンス '\ 033 [Fのような'は端末によってサポートされなければならない(se e 'termcap(3)')。 AFAIKウィンドウは、常に端末機能のサポートが非常に貧弱です –

答えて

1

IDLE内からではなく、コマンドラインからプログラムを実行する必要があります。

次に、この動作するはずです:

import sys 
import time 

for i in range(10): 
    sys.stdout.write("\r" + "Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.flush() 
print() 

\rは、行の先頭に行きます。だから、文字列 の文字列が少なくとも前の文字列と同じであることを確認する必要があります。それ以外の場合は、前の印刷の部分が表示されます。

1

ANSIエスケープシーケンスを使用してカーソルを移動しようとしています。 Windowsはデフォルトでこれらをサポートしていません。それらを有効にするには、Pythonで、その後、あなたの端末にpip install coloramacoloramaモジュールをインストールすることができます:あなたは、Windows 10にアップグレードした場合、あなたはこの代わりにサポートを有効にすることができます

import colorama 
colorama.init() 

import ctypes 
kernel32 = ctypes.windll.kernel32 
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) 

(出典:https://stackoverflow.com/a/36760881/6379747

関連する問題