我想要cythonize的SFML库定义了下面的这个函数,它允许更改错误的打印位置(默认情况下,SFML在未调用此函数时将错误消息写入控制台):无法重定向来自Cython的错误流
namespace sf {
std::ostream& err() {
static DefaultErrStreamBuf buffer;
static std::ostream stream(&buffer);
return stream;
}
}
对于上述功能简化我的文件.pxd:
cdef extern from 'SFML/System.hpp' namespace 'sf':
ostream& cerr 'sf::err'()
而且我.pyx模块,它编译并运行正常,但不重定向错误消息(他们仍然打印到控制台)。
cdef void set_error_handler():
cerr().rdbuf(NULL) # This call should prevent errors appearing in the console but it silently fails
set_error_handler()
我正在使用MSVC和静态链接到C++代码。
编辑
下面是例子,如何在自己的代码中SFML库记录错误(full source):
...
// Error, failed to load the image
err() << "Failed to load image \"" << filename << "\". Reason: " << stbi_failure_reason() << std::endl;
...
我的目标是出现在抑制像上面这样一个错误信息控制台,并最终将它们重定向到自己的缓冲区中。
你能提供一个最小的pyx文件,你实际上使用日志? – ead
@ead当然,我已经更新了这个问题。我不会将任何内容记录到'sf:err()'中,SFML库会执行此操作,我想要禁止该操作或重定向。 – HankMoody
如果在C++中编写'set_error_handler()'并从cython调用它,会发生什么情况。那它有用吗?只是试图排除,这是一个不是一个问题。 – ead