首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c++中使用pybind 11将python stdout重定向到日志文件

如何在c++中使用pybind 11将python stdout重定向到日志文件
EN

Stack Overflow用户
提问于 2021-06-01 15:54:45
回答 1查看 138关注 0票数 1

我想重定向python stdout,以便使用pybind11将其写入日志文件。

从pybind11文档中找到了py::scoped_ostream_redirect方法。

我想做以下几件事:

代码语言:javascript
运行
复制
py::scoped_ostream_redirect stream(
    py::module_::import("sys").attr("stdout"),
    log()                               

); 

将标准输出重定向到log(),其中log是一个c++对象。

据我所知,scoped_ostream_redirect用于将c++流重定向到python。我需要做相反的事情。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2021-06-11 03:27:55

sys.stdout可以分配给任何包含write和flush方法的类实例。

代码语言:javascript
运行
复制
class Logger
{
public:
   void write(std::string str){
   // write here where you want to write the content of print function
       log.write(str);
   }

   void flush(){
       std::cout << std::flush();
   }
}

在这里,您需要将类添加到python模块。

代码语言:javascript
运行
复制
PYBIND11_EMBEDDED_MODULE(embeded, module) 
{
    py::class_<LogWriter>(module, "Writer")
        .def("write", &Logger::write)
        .def("flush", &Logger::flush);
 }

void main(){
    py::module::import("embedded");
    Logger logger;       
    py::module::import("sys").attr("stdout") = logger
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67784850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档