2016-05-06 11 views
2

外部APIからデータを取得するなど、さまざまなタスクを実行するために他のクラスのメソッドを呼び出すDjango管理コマンドがあります。正常に動作しますが、私は私のテストを実行したときに、これはプリントアウトし、ネジ.....E....F...表示立ち上がるDjango管理コマンド中に1行の進捗状況を表示し、テスト中に無効にする

print('Fetched %d of %d' % (n, total) + ' '*30, end='\r') 

:私は、のようなものを進行状況が表示され、単一の行を出力していたものな方法で

。私はすべてのテストでprintにパッチを当てることができましたが、それはぎこちないようです。

だから、私はその進捗線を何か他の方法で出力しなければならない、そして/または(b)テストを実行している間にその出力を抑制する良い方法があるか?

+0

あなたは印刷物の周りに独自のラッパーを置くことができます。これは、sys.stdoutが端末かどうかをチェックし、それに応じて異なった振る舞いをします。 \ rターミナル\ nのファイルまたはパイプ – Jerzyk

答えて

1

最初のステップは、実際には印刷文を取り除き、loggingに置き換えることです。

djangoのロギングでは、印刷よりもはるかに制御が難しく、セットアップが難しくありません。重要な機能の2つは、ログメッセージをファイルまたはコンソールに移動するかどうかを制御できることです。また、DEBUGフラグに基づいてさらに微調整することもできます。

おそらくこのメッセージは、開発サーバーにのみ表示され、運用中ではない必要があります。ロギングはあなたを助けることができます。さらに重要なことに、テストが実行されるとデバッグフラグがオフになり、..... E .... Fが混乱することはありません。

+0

ありがとうございます。私はこれをロギングすることについてはよく分かりませんが、訂正して幸いです!まず、これらのprintステートメントは、管理コマンドを使用してコマンドラインから実行されるコードにのみ使用されるため、ライブサーバーで発生した場合は問題ありません。 2つ目は、進捗状況が更新された1行を印刷するために使用されています。 –

+0

はい。ロギングは、より洗練された印刷版として考えてください。 – e4c5

+0

いくつかのロギングが動作していますが、 'print( 'hello'、end = '\ r')'のようにコンソールの前の行を上書きする方法がわかりません。 –

関連する問題