I have a Cython extension which wraps a C++ library. The C++ library prints messages on stderr and I don't know how I can suppress it.
I tried to overwrite sys.stderr
which did not help. I am looking for the solution of this problem for Python.
Here is a "minimal" example:
I have the following files:
suppress_stderr_test/
test.h # defines C++ function that prints on stderr
cbindings.pxd # declares C++ function for Cython
test.pyx # defines a Python function that calls the C++ function
setup.py # compiles Cython wrapper
main.py # test script
Here are the contents of the files:
main.py:
from wrapper import my_verbose_function
my_verbose_function() # I want to suppress the output of that function
setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name='wrapper',
ext_modules=[
Extension("wrapper",
sources=["cbindings.pxd", "test.pyx"],
language="c++",
include_dirs=["."],
),
],
cmdclass={'build_ext': build_ext},
)
test.pyx:
cimport cbindings as cb
def my_verbose_function():
cb.myVerboseFunction()
cbindings.pxd:
cdef extern from "test.h":
void myVerboseFunction()
test.h:
#include <iostream>
void myVerboseFunction() { std::cerr << "bla" << std::endl; }