1

コードに次の行があります。

writer = cv.CreateVideoWriter('video.avi', cv.CV_FOURCC('X','V','I','D'), 30 ,(480,800), 1)

これをコンソールに出力するもの:

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__
4

2 に答える 2

3

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

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

于 2012-04-25T18:52:25.077 に答える
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!
于 2012-04-25T18:36:48.370 に答える