如何将SFML的错误信息传输给Cython?

2024-09-29 01:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将SFML的错误流包装起来,以便在Python空间中检索最后一条错误消息。你知道吗

下面是SFML如何声明其错误流(see source):

namespace sf {
    std::ostream& err();
}

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

// Redirect to a file
std::ofstream file("sfml-log.txt");
std::streambuf* previous = sf::err().rdbuf(file.rdbuf());

我的.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'

以及我的.pyx模块:

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)

get_last_error()函数中,我是否正确地将带有错误消息的stringbuf转换为Python字符串?你知道吗

更新

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

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

但是当调用上面定义的get_last_error()时,我仍然无法检索SFML报告的出现在我的stringbuf error_buffer中的错误(返回值是空字符串)。你知道吗


Tags: frombuffer错误externerrorsfnamespacestd