我正在使用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,它的当前控制台,每分钟调用该功能,这意味着即使是一个简单的菜单或更有用的状态信息,如果没有这个调用填满控制台,很难呈现。
只是想知道是否有人经历过同样的事情和/或有任何想法我怎么能够阻止这种情况发生,或者可以提供关于我做错的指示?
答案 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