2016-08-18 14 views
1

call_commandを使用して管理コマンドで実行中のdjango-noseテストを実行しています。私は出力をキャプチャし、失敗したかどうかに応じて何かを行う必要があります。 管理コマンドで私の現在のコード:私の場合はDjango Nose - テスト実行中に出力をキャプチャする必要があります

content = StringIO() 
try: 
    call_command('test', '--nologcapture', '-s', stdout=content) 
     # since its calling system exit 
except BaseException: 
    pass 
content.seek(0) 
print content.read(), '<-- content' 

# Check if test is passed and do something or else something else. 

、内容は常に空の文字列です。

多くのノーズプラグインを試しましたが、出力をフェッチできません。

ありがとうございました。

答えて

0

問題の考えられる原因は、管理コード内で、管理コマンドインスタンスのself.stdout属性を使用するのではなく、直接sys.stdoutになるprintステートメントを使用していることです。

管理コマンド内のコードを確認してください。

self.stdout.write(...) 
# or, perhaps ... 
print(..., file=self.stdout) 

これが当てはまらない、とあなたが管理コマンドのコードを管理している場合は、self.stdoutを使用するようにそれを修正する:プリントはのようになるはずです。次に、StringIOインスタンスでキャプチャされた出力が現在のコードで表示されます。

管理コマンドのコードを制御できない場合は、コマンドを呼び出す前にstdout(コンテキストマネージャを使用)をリダイレクトして別の方法を実行する必要があります。

注:StringIOインスタンスからの出力を取得する簡単な方法は、シークと読み取りの代わりにcontent.getvalue()を使用しています。

関連する問題