4

この単純な関数「processing_flush」を作成して、一連のポイント (インデックスで指定) を出力して、ソフトウェアがデータを処理しているかどうか、最終的には速度をテストしました。私のデータの合計サイズは不明です。

    import sys
    import time

    def processing_flush(n, index=5):
        sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
        sys.stdout.flush()

    for n in xrange(20):
        processing_flush(n, index=5)
        time.sleep(1)

私が修正できない問題は、最初にすべてのポイントが印刷されるときです (例: 処理中 .... インデックスが 5 の場合)、カーソルがゼロから開始されません。

4

1 に答える 1

6

同じ行を再度上書きする前に、少なくともドットがスペースである位置をクリアする必要があります。

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()

その理由は、最初の部分だけを上書きすると、シェルが前の行の残りの文字を覚えているからです。

于 2013-03-28T15:00:10.043 に答える