2012-04-25 28 views
1

をstdoutに書き込むの機能を停止私は私のコードでこの行を持っている

Output #0, avi, to 'video.avi': 
Stream #0:0: Video: mpeg4, yuv420p, 480x800, q=2-31, 24576 kb/s, 90k tbn, 30 tbc 

私は、stdoutに何かを印刷するから、それを停止したいが、コード内に何かもっと自分自身で出力する可能性を保ちます。どうすればこれを達成できますか?

私はこれを試しましたが、機能しませんでした。

class NullStream: 
    def write(self, text): 
     pass 

sys.stdout = NullStream() 
sys.stderr = NullStream() 

print "hello" #This doesn't outputs 

#This function still outputs to console: 
writer = cv.CreateVideoWriter('video.avi', cv.CV_FOURCC('X','V','I','D'), 30 ,(480,800), 1) 

sys.stdout = sys.__stdout__ 
sys.stderr = sys.__stderr__ 

答えて

3

それは、この情報を出力OpenCVのではありません。それはFFMPEG(OpenCVによって呼び出されます)です。

FFMPEGを再コンパイルして、これらのデバッグを無効にすることができます。

+0

ffmpegの冗長性を再コンパイルせずに設定する方法はありますか? – lexmiir

+0

コマンドラインツールを使用している場合のみ: 'ffmpeg -loglevel 0'、これはOpenCVがカーテンの背後で行うことではありません。短い答え:私は再コンパイル以外の方法は知らない。 – karlphillip

2
import os 
import sys 
saved_stdout, saved_stderr = sys.stdout, sys.stderr 
sys.stdout = sys.stderr = open(os.devnull, "w") 
writer = cv.CreateVideoWriter('video.avi', cv.CV_FOURCC('X','V','I','D'), 30 ,(480,800), 1) 
sys.stdout, sys.stderr = saved_stdout, saved_stderr 
print 'Now this will print to stdout' 

デモ:

>>> import os 
>>> import sys 
>>> saved_stdout, saved_stderr = sys.stdout, sys.stderr 
>>> sys.stdout = sys.stderr = open(os.devnull, "w") 
>>> print 'hello world'      # no output 
>>> sys.stderr.write('Invisible Error!\n') # no ouput 
>>> sys.stdout, sys.stderr = saved_stdout, saved_stderr 
>>> print 'goodbye world'     
goodbye world 
>>> sys.stderr.write('Error!\n') 
Error! 
+0

テスト済みですが、それでも同じことが出力されます。 – lexmiir

+0

ところで、sys___ stdout__ではなくsaved_stdout = sys.stdoutを使用する利点がありますか? – lexmiir

+0

デモ編集を参照してください。私のために働くと思われる。私はこのアプローチをたくさん使ってきました。私は 'sys .__ stdout__'の質問に対する答えを知らない。 – alan

関連する問題