2

Pythonサブプロセスを介してdjangounittestを実行し、すべてのデータ(特にFailureまたはOKという単語)を変数に格納したいと思います。ただし、サブプロセスを使用してこれを実行すると、出力には次の部分のみが含まれます。

"エイリアス'default'のテストデータベースを作成しています...""エイリアス'default'のテストデータベースを破棄しています..."

残りは画面に表示されるだけですが、これは私が望まないことです。djangoユニットテストからのすべての出力を変数に取り込むにはどうすればよいですか?

args_list = ['python', '/path/to/manage.py', 'test', 'myapp']
process=subprocess.Popen(args_list, stdout=subprocess.PIPE)
output, errors = process.communicate()
print output

出力は次のようになります。エイリアス'default'のテストデータベースを作成しています...エイリアス'default'のテストデータベースを破棄しています...

ただし、私の画面には、djangoユニットテストの標準出力全体が表示されます。すべての出力を変数に格納するにはどうすればよいですか。

4

4 に答える 4

2

stderr を stdout にリダイレクトする必要があります。固定コードは次のとおりです。

args_list = ['python', '/path/to/manage.py', 'test', 'myapp']
process=subprocess.Popen(args_list, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
output, errors = process.communicate()
print output

または、シェルで次のように入力することもできます。

python manage.py test myapp > stdout.txt 2> stderr.txt
于 2014-12-24T21:42:45.800 に答える
1

unittest.TestResult オブジェクトを使用してテスト結果を処理できます。例については、 https://stackoverflow.com/a/284192/579461を参照してください。

于 2012-11-09T02:38:53.513 に答える
1

検査のために stdout を変数に本当にリダイレクトしたい場合は、次のコードを使用して実行できます。

from cStringIO import StringIO
import sys

output = StringIO()
sys.stdout = output
print "Hello World!"
print 42
sys.stdout = sys.__stdout__
print output.getvalue()
>>>
Hello World!
42
于 2012-11-09T02:54:06.487 に答える
0

すべての出力を変数に格納するにはどうすればよいですか。

stderr を stdout にリダイレクトします。

from subprocess import check_output, STDOUT

output = check_output(args_list, stderr=STDOUT)
print output,
于 2014-12-26T00:32:13.600 に答える