Python 如何获取SFML';给Cython的错误消息?
我正试图将SFML的错误流包装起来,以便将最后一条错误消息检索到Python空间中 以下是SFML如何声明其错误流(): SFML表示,您可以将上述流重定向到缓冲区中(在本例中为文件,但我希望最终将其转换为字符串): 我的.pxd文件带有一些简单的包装: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
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 ()