Pybind11中show()函数在Jupyter Notebook无输出的问题求助
解决Pybind11扩展中
show()函数在Jupyter Notebook无法输出的问题 问题根源在于Jupyter Notebook的输出流机制和普通Python终端不同,C++层的std::cout不会自动转发到Jupyter的输出区域。你已经引入了<pybind11/iostream.h>,可以利用其中的工具解决这个问题,以下是两种可行方案:
方案1:在函数内部显式重定向输出
修改C++中的show函数,添加流重定向逻辑:
void show(std::string prompt, double x){ // 创建重定向对象,将std::cout绑定到Python的sys.stdout py::scoped_ostream_redirect redirect(std::cout, py::module_::import("sys").attr("stdout")); std::cout << prompt << " " << x << '\n'; }
方案2:通过调用守卫自动处理重定向
保持show函数不变,在绑定函数时添加py::call_guard,让每次调用函数都自动完成流重定向:
PYBIND11_MODULE(appname, handle) { handle.def("show", (void (*)(std::string, double)) &show, py::call_guard<py::scoped_ostream_redirect>()); }
验证方法
重新编译你的C++扩展,在Jupyter Notebook中执行原Python代码:
import appname appname.show("number:", 5.0)
此时即可正常看到输出内容。
内容的提问来源于stack exchange,提问作者Gatto Nou
相关产品推荐
相关产品推荐

