防止OpenCV的CreateVideoWriter函数在Python中打印到控制台
我正在使用Python的OpenCV库,遇到了一点小麻烦。在使用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)
虽然这个应用程序最终会有一个控制界面,但现在它是基于控制台的,这个函数每分钟都会被调用一次,这就导致即使是简单的菜单或者更有用的状态信息也很难呈现,因为这些调用会把控制台填得满满的。
我只是想知道有没有人遇到过同样的问题,或者有没有什么想法可以帮助我防止这种情况发生,或者能告诉我我哪里做错了?
1 个回答
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