解決済み: コンソール出力を同じ場所に書き込む

コンソール出力を同じ場所に書き込むことは、開発者が Python アプリケーションを操作する場合、特にコマンド ラインでユーザー インターフェイスを開発する場合、進行状況インジケーターを作成する場合、コンソール データをリアルタイムで更新する場合に便利なテクニックです。 この記事では、コンソール出力を上書きする解決策について説明し、コードを段階的に説明し、このタスクを可能にする特定のライブラリと組み込み Python 関数について詳しく説明します。

これを実現するには、テキストベースのユーザー インターフェイスの使用に大きく依存するターミナルベースのアプリケーションを作成するために特別に設計された有名な Python ライブラリ「curses」を使用できます。 ただし、簡略化して理解しやすくするために、Python の組み込みの「sys」モジュールと「time」モジュールを使用してコンソール出力を上書きします。

Python でのコンソール出力の上書き

主なアイデアは、 sys.stdout.write() この関数を使用すると、同じ行に印刷できます。 キャリッジリターン 文字 (「r」) を使用して行の先頭に戻ると、出力を効果的に上書きできるようになります。

Python を使用してコンソール出力を上書きする例を次に示します。

import time
import sys

for i in range(10):
    sys.stdout.write("rStep: %d" % i)
    sys.stdout.flush()
    time.sleep(1)

コードの段階的な説明

1. まず、必要なモジュールをインポートします。

   import time
   import sys
   

この 時間 モジュールは反復間に遅延を追加するために使用されます。 SYS モジュールは出力をコンソールに書き込むために使用されます。

2. 次に、進行状況カウンターをシミュレートして、数値範囲を反復するループを作成します。

   for i in range(10):
   

このループは 0 から 9 まで反復され、実質的に XNUMX 回実行されます。

3. ループ内で、 sys.stdout.write() 現在の反復番号をラベルとともに出力する関数:

   sys.stdout.write("rStep: %d" % i)
   

「r」文字は行頭へのリセットとして機能するキャリッジ リターンで、次の出力が現在の出力を上書きできるようにします。

4. 必ず使用してください sys.stdout.flush() コンソールに書き込んだ後:

   sys.stdout.flush()
   

flash() 関数は内部バッファをクリアし、出力がすぐに表示されるようにします。

5. 最後に、 time.sleep() 関数:

   time.sleep(1)
   

この一時停止は XNUMX 秒間続くため、出力が上書きされるのが確認しやすくなります。

これで、反復ごとにコンソール出力がどのように上書きされるかを確認できます。

「sys」ライブラリの概要

この SYS library は、インタープリターの内部およびさまざまなシステム固有のパラメーターへのアクセスを提供する強力な組み込み Python モジュールです。 この記事では、次の使用に焦点を当てました。 sys.stdout.write()sys.stdout.flush() コンソール出力を上書きする関数。 ただし、「sys」ライブラリは、コマンド ライン引数、バイトオーダー、例外、事前定義されたパスなど、他の多くの機能を提供します。

「time」ライブラリーの概要

この 時間 library は、時間の操作と処理に関連するさまざまな関数を提供する別の組み込み Python モジュールです。 この例では、 time.sleep() 反復間に遅延を作成する関数。 「time」ライブラリには、実行時間の測定、時間形式間の変換、および現在時刻の取得のための他のツールも提供されます。 このモジュールは、Python アプリケーションで時間関連の関数を操作したりタスクをスケジュールしたりする開発者にとって不可欠です。

関連記事:

コメント