如何将 STDOUT 重定向到 NSTextView?

2024-03-09

有人可以告诉我如何将标准输出重定向到 NSTextView 吗?

NSLog打印的信息是否属于std?

Thanks


下面的代码使用dup2将 stdout 插入到写入端NSPipe目的。读取端通过 GCD 调度源进行观察,该源从管道读取数据并将其附加到文本视图。

NSPipe* pipe = [NSPipe pipe];
NSFileHandle* pipeReadHandle = [pipe fileHandleForReading];
dup2([[pipe fileHandleForWriting] fileDescriptor], fileno(stdout));
dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, [pipeReadHandle fileDescriptor], 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
dispatch_source_set_event_handler(source, ^{
    void* data = malloc(4096);
    ssize_t readResult = 0;
    do
    {
        errno = 0;
        readResult = read([pipeReadHandle fileDescriptor], data, 4096);
    } while (readResult == -1 && errno == EINTR);
    if (readResult > 0)
    {
        //AppKit UI should only be updated from the main thread
        dispatch_async(dispatch_get_main_queue(),^{
            NSString* stdOutString = [[NSString alloc] initWithBytesNoCopy:data length:readResult encoding:NSUTF8StringEncoding freeWhenDone:YES];
            NSAttributedString* stdOutAttributedString = [[NSAttributedString alloc] initWithString:stdOutString];
            [self.logView.textStorage appendAttributedString:stdOutAttributedString];
        });
    }
    else{free(data);}
});
dispatch_resume(source);

NSLog(@"...")不输出到stdout不过 - 它打印到stderr。如果您想将其重定向到文本视图,请更改

dup2([[pipe fileHandleForWriting] fileDescriptor], fileno(stdout));

to

dup2([[pipe fileHandleForWriting] fileDescriptor], fileno(stderr));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 STDOUT 重定向到 NSTextView? 的相关文章

随机推荐

  • 如何使用logstash插件-logstash-input-http

    我正在探索 Logstash 以接收 HTTP 上的输入 我已经使用以下方式安装了 http 插件 插件安装logstash input http 安装成功 然后我尝试使用以下命令运行logstash Logstash e 输入 http
  • R:Tibble 与 ggplot2(绘制图表)

    我正在尝试遵循 R 中的教程 https rviews rstudio com 2017 09 25 survival analysis with r https rviews rstudio com 2017 09 25 survival
  • 当用户调整 QMainWindow 大小时如何分配回调?

    我既无法在 QMainWindow 上找到类似教程的调整大小事件方案 也没有在 Qt 设计窗口的下拉菜单中看到任何用于添加调整大小事件的选项 我是 Qt 新手 我想为 QMainWindow 调整大小事件编写一个槽函数 有这样的活动吗 我怎
  • 在 Excel 中设置 csv 文件格式

    Win XP Excel 2007 我知道还有很多关于 csv 格式的其他帖子 但无法找到我需要的内容 我们的一些数据被另一家公司保存在异地 他们每天早上都会向我们发送包含前几天数据的 csv 文件 问题是这些数据来自可能具有下拉列表的网络
  • 使用sync_imports()在IPython.parallel引擎上导入自定义模块

    我一直在玩 IPython parallel 我想使用我自己的一些自定义模块 但无法按照上的说明进行操作烹饪书 http ipython org ipython doc stable parallel parallel multiengin
  • Nifty Modal - 如何在没有按钮的情况下触发模式

    这个脚本 http stuff wp dreams com modal 提供了很棒的模式转换 我想使用它们而不是标准的警报消息 现在脚本的演示展示了如何通过按 a 来触发它们
  • 如何从 R 读取换行符分隔的 JSON 文件?

    我有一个换行符分隔 即每个 JSON 对象仅限于文件中的 1 行 name json1 name json2 name json3 在Python中 我可以轻松地阅读它 如下所示 我必须使用编码encoding cp850 读取我的真实数据
  • IllegalStateException:数据库已关闭(使用 ViewPager)

    我对导致此错误的原因感到困惑 因为我已确保正确关闭数据库适配器 至少我认为是 以下是 LogCat 的说法 所有这些标签的标签都是 AndroidRuntime 致命异常 主要 java lang IllegalStateException
  • 从 ASP.NET Core Web API 将多 GB 文件流式传输到 AWS S3

    我希望通过 ASP NET Core Web API 在 AWS S3 存储桶中创建一个大型 多 GB 文件 该文件足够大 我不想加载Stream在将其上传到 AWS S3 之前先将其存储到内存中 Using PutObjectAsync
  • 如何拆分结果中尾随空字符串的字符串?

    我对 Scala 字符串分割行为有点困惑 因为它不能一致地工作 并且缺少一些列表元素 例如 如果我有一个包含 4 列和 1 个缺失元素的 CSV 字符串 elem1 elem2 elem 4 split List elem1 elem2 e
  • [Cucumber][JVM][Maven]测试无法通过 maven 从命令行运行

    我正在使用 java cucumber 和 Maven 运行测试 我正在使用 Eclipse IDE pom xml 也具有 Cucumber 依赖项 我以两种方式运行测试 从 Eclipse IDE 我将测试作为 Junit 测试运行 测
  • 如何防止未经授权的蜘蛛抓取

    我想防止从我们的网站之一自动抓取 html 同时不影响合法的蜘蛛抓取 googlebot 等 是否已经存在可以实现此目的的东西 我是否使用了正确的术语 编辑 我主要是为了防止人们恶意这样做 IE 他们不会遵守 robots txt EDIT
  • 并行下载大量文件的有效方法

    我正在尝试从互联网下载大量文件 图片 我正在努力处理异步 并行 因为 a 我不能说是否有文件 我刚刚收到一百万个链接 其中要么是一张图片 300kb 到 3MB 要么是 404 页面不存在 因此 为了避免下载 0 字节文件 我询问同一页面两
  • 没有默认构造函数的类对象的值初始化

    我试图通过以下方式了解值初始化的确切行为T or T 对于类类型T在 C 11 中 让我困惑的是这两个片段取自http en cppreference com http en cppreference com 值初始化 http en cp
  • Swift 逆向工程:Swift 函数名称规则?

    我有一个关于 swift 函数名称规则的问题 当我尝试在 IDA Pro 中分析用 swift 编写的 iOS 应用程序 也许 OS X 也是同样的情况 例如 swift 2048 时 我得到了这样的函数名称 EXPORT TFC10swi
  • Openssl 1.1.0 中的 c2i_ASN1_INTEGER 函数

    我最近在linux系统中将openssl从1 0 2n更新到1 1 0g 早些时候我正在使用 ASN1 INTEGER c2i ASN1 INTEGER ASN1 INTEGER a const unsigned char pp long
  • DataFrame 对象没有属性“名称”

    我目前有一个 Pandas DataFrame 列表 我试图对每个列表元素 即列表中包含的每个 DataFrame 执行操作 然后将该 DataFrame 保存到 CSV 文件 我分配了一个name属性到每个 DataFrame 但我意识到
  • Haskell:Yesod 和状态

    我正在阅读代码玩具 URL 缩短器 http flygdynamikern blogspot com au 2011 06 toy url shortener with yesod and acid html 然而 有一些重要的部分我就是无
  • 纱线安装命令时出现 ESOCKETTIMEDOUT 错误

    我在使用纱线时遇到了麻烦 但仅限于一台计算机 当我跑步时yarn install有些软件包无法下载 并且出现此错误 ESOCKETTIMEDOUT 起初我只是认为存储库存在一些问题 但是 我可以通过网络浏览器下载该包 我在另一台电脑上没有任
  • 如何将 STDOUT 重定向到 NSTextView?

    有人可以告诉我如何将标准输出重定向到 NSTextView 吗 NSLog打印的信息是否属于std Thanks 下面的代码使用dup2将 stdout 插入到写入端NSPipe目的 读取端通过 GCD 调度源进行观察 该源从管道读取数据并