18

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

2010 年有一个较早的类似问题似乎不再是最新的。

在 SU 上,还有一个类似的问题尚未得到解答。

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

我可以以某种方式将其改回来吗?

4

2 回答 2

19

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

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

于 2013-03-27T09:29:50.937 回答
3

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

这并不是对任何其他更好的建议的否定。这只是一种在不改变(旧)程序的情况下获得输出的方法。

于 2014-09-09T21:26:07.003 回答