我想要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