Estou tentando suprimir uma mensagem impressa em stdout por uma biblioteca implementada em C.
Meu caso de uso específico é OpenCV, então irei usá-lo para o MCVE abaixo. A estimateChessboardSharpness
função imprime quando o tamanho da grade é muito pequeno (o que acontece aqui ). Fiz um PR para consertar , mas enquanto isso, gostaria de suprimir a mensagem. Por exemplo:
import cv2
import numpy as np
img = np.zeros((512, 640), dtype='uint8')
corners = []
for i in range(10):
for j in range(8):
corner = (30 + 3 * j, 70 + 3 * i)
if i and j:
corners.append(corner)
if (i % 2) ^ (j % 2):
img[corner[0]:corner[0] + 3, corner[1]:corner[1] + 3] = 255
corners = np.array(corners)
>>> cv2.estimateChessboardSharpness(img, (9, 7), corners)
calcEdgeSharpness: checkerboard too small for calculation.
((9999.0, 9999.0, 9999.0, 9999.0), None)
A linha parece ser simples std::cout << ...
, então tentei todos os seguintes:
from contextlib import redirect_stdout
from os imoprt devnull
import sys
with redirect_stdout(None):
cv2.estimateChessboardSharpness(img, (9, 7), corners)
with open(devnull, "w") as null, redirect_stdout(null):
cv2.estimateChessboardSharpness(img, (9, 7), corners)
sys.stdout = open(devnull, "w")
cv2.estimateChessboardSharpness(img, (9, 7), corners)
Eu até tentei redirect_stderr
em vez de redirect_stdout
apenas por precaução. Também tentei configurar OPENCV_LOG_LEVEL=SILENT
em bash e os.environ["OPENCV_LOG_LEVEL"] = "SILENT"
em python antes de importar cv2
, não que esperasse que o stdout fosse confundido com o log neste caso.
Em todos os casos, a mensagem é impressa. Como faço para parar?