同じ行を再度上書きする前に、少なくともドットがスペースである位置をクリアする必要があります。
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s" % (index * " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
上記のコードでは、短いちらつきが発生する場合があります。n % index
あなたの特定のケースでは、 0になったときに行をクリアするだけで十分です:
def processing_flush(n, index=5):
if n % index == 0:
sys.stdout.write("\rProcessing %s" % (index * " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
または、常にindex-1
文字を書くことをお勧めします:
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s%s" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.flush()
編集 1:または、常に最後のドットの後にカーソルを置きたい場合:
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s%s" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
編集 2:または、カーソルを常に行頭に置きたい場合:
def processing_flush(n, index=5):
sys.stdout.write("Processing %s%s\r" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.flush()
その理由は、最初の部分だけを上書きすると、シェルが前の行の残りの文字を覚えているからです。