防止OpenCV函数CreateVideoWriter从Python打印到控制台

时间:2010-11-07 15:52:51

标签: python opencv

我正在使用OpenCV的Python绑定并且使用CreateVideoWriter遇到了一点烦恼,当我调用该函数时,它会向控制台输出类似下面的内容,我似乎无法抑制它或理想地重定向把它变成一个变量。

Output #0, avi, to 'temp/Temp.0433.avi':
    Stream #0.0: Video: mjpeg, yuvj420p, 320x240, q=2-31, 9830 kb/s, 90k tbn, 25
 tbc

我用于测试的命令是:

self.file = cvCreateVideoWriter(nf,CV_FOURCC('M','J','P','G'),self.fps,cvSize(320,240),1)

虽然从长远来看,这个应用程序将有一个控制GUI,它的当前控制台,每分钟调用该功能,这意味着即使是一个简单的菜单或更有用的状态信息,如果没有这个调用填满控制台,很难呈现。

只是想知道是否有人经历过同样的事情和/或有任何想法我怎么能够阻止这种情况发生,或者可以提供关于我做错的指示?

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是暂时重新定位sys.stdout,同时调用凌乱的函数 - 其他任何东西都会强制你改变Python绑定。

幸运的是,这很简单:只需使用contextmanager

>>> import contextlib
>>> @contextlib.contextmanager
... def stdout_as(stream):
...     import sys
...     sys.stdout = stream
...     yield
...     sys.stdout = sys.__stdout__
...
>>> print("hi")
hi
>>> import io
>>> stream = io.StringIO()
>>> with stdout_as(stream):
...     print("hi")
...
>>> stream.seek(0)
0
>>> stream.read()
'hi\n'
>>> print("hi")
hi