gpt4 book ai didi

c++ - 从控制台 C++ 抓取打印语句

转载 作者:行者123 更新时间:2023-11-28 01:14:30 29 4
gpt4 key购买 nike

我的程序中有两个记录器。一个是我在图形用户界面中制作的,另一个是 super 复杂但设计精良并打印到控制台的。我正在尝试将输出从漂亮的控制台记录器获取到呈现的记录器。我已经在阳光下尝试了所有方法来让它工作,但我似乎无法弄清楚(由于我对其他记录器(spdlog)的代码缺乏理解。)我的结论是直接从打印的内容是执行此操作的最佳方法,但我在网上找不到任何人询问如何执行此操作。我看到了一些问题,但他们只是将代码作为答案发布,并没有真正解释发生了什么。 我的问题:有没有一种方法可以从控制台获取打印的语句,这样做会带来哪些性能问题/并发症。

例如,如果我做 std::cout << "hello!" << std::endl;或者一些 printf 语句,我希望能够在代码中进一步向下能够获取“hello!”

最佳答案

My conclusion is that taking the logs directly from what is printed is the best way to do this but I can't find online anyone asking how to do this.

现在的控制台是终端仿真器。原始终端的输出进入打印机并且无法(轻松)读回。

应用程序的stdoutstderr(控制台)流是只写的。此外,在 Windows 和 Unix/Linux 中,您可以使用 | 将程序的(控制台)输出(stderrstdout 之一或两者)通过管道传输到另一个应用程序> (管道)在您的应用程序的 stdout 和另一个应用程序的 stdin 之间创建一个管道 IPC。 IPC 管道是只写的,您的应用程序不可能从中读回。

您可能能够访问控制其 Windows 控制台窗口的 Windows cmd.exe 的帧缓冲区的内容,但这不会是数据的逐字字节精确拷贝由于 escape sequences interpreted by Windows console,您写入了 stdout .

如果 stdout 被重定向到一个文件中,您可以重新打开该文件进行阅读,但是没有可移植的方式来重新打开该文件。

换句话说,没有可移植的方式来读回控制台输出。


I have tried everything under the sun to get this to work but I can't seem to figure it out (due to my lack of understanding of the code from the other logger(spdlog).

我打赌你还没有尝试阅读 spdlog 文档,尤其是 logger with multi sinks .接收器是一种输出抽象,其实现可以写入文件、内存或两者。您需要的是将您自己的接收器附加到打印到您的 UI 中的 spdlog

base_sink 派生您的水槽并实现抽象成员函数:

  • virtual void sink_it_(const details::log_msg &msg) = 0; 打印到 UI 中,并且,
  • virtual void flush_() = 0; 什么都不做。

然后将接收器类的一个对象附加到该 spdlog

关于c++ - 从控制台 C++ 抓取打印语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141827/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com