【问题标题】:how to get stdout into Console.app如何让标准输出进入 Console.app
【发布时间】:2014-09-10 05:26:07
【问题描述】:

之前,我可以从 Console.app 中的应用程序中读取所有 stdout/stderr 数据。一段时间以来,情况不再如此(但 NSLog 数据仍然存在)。我现在是 10.8。

有一个 earlier similar question from 2010 似乎不再是最新的了。

在 SU 上,还有一个 similar question 尚未得到答复。

是否已更改,即不应再记录标准输出?还是我的系统出了问题(从旧的 SU 问题来看,听起来可能是这种情况 - 尽管没有帮助)?

我可以把它改回来吗?

【问题讨论】:

    标签: macos stdout


    【解决方案1】:

    在 Mountain Lion 之前,launchd 管理的所有进程,包括常规应用程序,都将其 stdout 和 stderr 文件描述符转发到系统日志。在 Mountain Lion 及更高版本中,对于 launchd 托管应用程序,stdout 和 stderr 无处可去。只有明确发送到系统日志的消息才会结束。

    如果您正在编写应用程序并希望在控制台中显示一些输出,那么请改用基于 syslog(3)asl(3) 构建的 API。 NSLog 就是这样一种 API,它还具有记录到 stderr 的优势,因此无论您如何启动应用程序,您都可以轻松查看输出。如果您想要该功能但想直接使用aslsyslog,那么您需要分别查看asl_openASL_OPT_STDERR 选项和openlogLOG_PERROR 选项。

    【讨论】:

    • 您对launchd 中的这种行为发生变化以及为什么会发生变化有任何参考吗?
    • 我没有任何真正的参考,但您可以通过查看launchd source releases 来确认更改。您可以看到在 OS X 10.7.5 的 launchd-392.39 中存在的对 log_redirect_fdjob_log_stdouterr 的引用在 launchd-442.21 中不再存在。这是负责读取应用程序的 stderr 和 stdout 描述符并将它们的输出转发到系统日志的逻辑。
    【解决方案2】:

    如果您有旧应用并想查看标准输出或标准错误,请从终端打开该应用。您可以绕到可执行文件并从命令行打开它,就像在正常的旧世界中一样:输入程序名称。然后消息将出现在终端上。

    这并不是否定任何其他更好的建议。这只是一种无需更改(旧)程序即可获得输出的方法。

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 2013-06-09
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2013-03-01
      • 2010-12-25
      相关资源
      最近更新 更多