Python 如何获取SFML';给Cython的错误消息?

Python 如何获取SFML';给Cython的错误消息?,python,c++,cython,sfml,cythonize,Python,C++,Cython,Sfml,Cythonize,我正试图将SFML的错误流包装起来,以便将最后一条错误消息检索到Python空间中 以下是SFML如何声明其错误流(): SFML表示,您可以将上述流重定向到缓冲区中(在本例中为文件,但我希望最终将其转换为字符串): 我的.pxd文件带有一些简单的包装: cdef extern from '<sstream>' namespace 'std' nogil: cppclass stringbuf: stringbuf() except + cdef exter

我正试图将SFML的错误流包装起来,以便将最后一条错误消息检索到Python空间中

以下是SFML如何声明其错误流():

SFML表示,您可以将上述流重定向到缓冲区中(在本例中为文件,但我希望最终将其转换为字符串):

我的.pxd文件带有一些简单的包装:

cdef extern from '<sstream>' namespace 'std' nogil:
    cppclass stringbuf:
        stringbuf() except +

cdef extern from '<iostream>' namespace 'std' nogil:
    cppclass ostream:
        stringbuf* rdbuf(stringbuf*)

cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
    ostream cerr 'sf::err'
我是否在
get\u last\u error()
函数中将带有错误消息的
stringbuf
正确地转换为Python字符串

更新 我已经设法编译了我的Cython代码。我在这里添加了括号:

cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
    ostream cerr 'sf::err()'  # Added ()

但是当调用上面定义的
get\u last\u error()
时,我仍然无法检索SFML报告的出现在我的
stringbuf error\u buffer
中的错误(返回值为空字符串)。

stringbuf有一个str()方法,该方法将返回基础字符串的副本。请注意,您需要在阅读完自助餐后清除它,否则信息会累积。@spectras感谢您!更新问题。
cdef extern from '<sstream>' namespace 'std' nogil:
    cppclass stringbuf:
        stringbuf() except +

cdef extern from '<iostream>' namespace 'std' nogil:
    cppclass ostream:
        stringbuf* rdbuf(stringbuf*)

cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
    ostream cerr 'sf::err'
cdef void set_error_handler(stringbuf& buffer):
    cerr.rdbuf(&buffer)

cdef object get_last_error():
    error = error_buffer.str()
    error_buffer.str('')
    return error

cdef stringbuf error_buffer
set_error_handler(error_buffer)
cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
    ostream cerr 'sf::err()'  # Added ()