5

私が欲しかったのは、time.sleep() を使用して 1 秒あたりにドットが印刷される 5 ドットを印刷することですが、結果は 5 秒の遅延後に一度に 5 ドットが印刷されました。
print と sys.stdout.write の両方を試しましたが、同じ結果でした。

アドバイスをありがとう。

import time
import sys

def wait_for(n):
    """Wait for {n} seconds. {n} should be an integer greater than 0."""
    if not isinstance(n, int):
        print 'n in wait_for(n) should be an integer.'
        return
    elif n < 1:
        print 'n in wait_for(n) should be greater than 0.'
        return
    for i in range(0, n):
        sys.stdout.write('.')
        time.sleep(1)
    sys.stdout.write('\n')

def main():
    wait_for(5)    # FIXME: doesn't work as expected

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print '\nAborted.'
4

2 に答える 2

8

書き込み後にフラッシュする必要があります。

sys.stdout.write('foo')
sys.stdout.flush()
wastetime()
sys.stdout.write('bar')
sys.stdout.flush()
于 2010-05-11T07:40:57.920 に答える
4

sys.stderr.writeプログレスバーに使用する必要があります。stderr には (まったく偶然ではありませんが) バッファリングされないという利点があるため、sys.stderr.flush呼び出しは必要ありません。

この回答も参照してください。

于 2010-06-07T14:02:02.440 に答える