Запретить функции OpenCV CreateVideoWriter печатать на консоль в Python - PullRequest
1 голос
/ 07 ноября 2010

Я использую привязки 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 голос
/ 07 ноября 2010

Я думаю, что самый простой способ сделать это - временно перенаправить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...