147

Pythonで印刷したアイテムをPythonGUIからではなく、コマンドプロンプトから削除できるかどうか疑問に思いました。例えば

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
print (a)

だからそれは印刷します

>>>Loading   
>>>Loading. 
>>>Loading.. 
>>>Loading...

しかし、私の問題は、これをすべて1行にまとめたいということです。そのため、何か他のものが発生したときに、それを自分で削除します。したがって、印刷する代わりに、印刷"Loading", "Loading.", "Loading...したいのです"Loading."が、その行にあるものを"Loading.."削除"Loading.."してに置き換えてから、(同じ行にある)を削除してに置き換え"Loading..."ます。説明するのはちょっと難しいです。

psバックスペース文字を使おうとしましたが、うまくいかないようです("\b"

4

3 に答える 3

228

CRを使用して行の先頭に移動します。

import time
for x in range (0,5):  
    b = "Loading" + "." * x
    print (b, end="\r")
    time.sleep(1)
于 2011-03-13T18:20:09.493 に答える
124

1つの方法は、ANSIエスケープシーケンスを使用することです。

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

また、場合によっては便利です(たとえば、以前より短いものを印刷する場合)。

sys.stdout.write("\033[K") # Clear to the end of line
于 2011-03-13T17:22:31.027 に答える
32
import sys
import time

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
    # \r prints a carriage return first, so `b` is printed on top of the previous line.
    sys.stdout.write('\r'+b)
    time.sleep(0.5)
print (a)

バッファリングなしで要求されたときに結果を印刷するには、印刷を実行しているコンソールによっては、sys.stdout.flush()直後に実行する必要がある場合があることに注意してください。sys.stdout.write('\r'+b)

于 2011-03-13T18:05:36.253 に答える