之前,我可以从Console.app中的应用程序读取所有stdout / stderr数据。一段时间以来,情况已经不是这样了(尽管NSLog数据仍然存在)。我现在在10.8。
有一个earlier similar question from 2010似乎不再是最新版了。
在SU上,还有一个尚未回答的similar question。
是否已更改,即stdout不应再被记录?或者是我的系统出现了问题(从旧的SU问题来看,听起来可能就是这样 - 尽管没有帮助)?
我可以以某种方式改变它吗?
答案 0 :(得分:16)
在Mountain Lion之前,launchd
管理的所有进程(包括常规应用程序)都将其stdout和stderr文件描述符转发到系统日志。在Mountain Lion及以上版本中,stdout和stderr无处可用于launchd
托管应用程序。只有明确发送到系统日志的消息才会结束。
如果您正在编写应用程序并希望在控制台中显示某些输出,请采用基于syslog(3)
或asl(3)
构建的API。 NSLog
就是这样一个API,它具有登录到stderr的优势,因此无论您如何启动应用程序,都可以轻松查看输出。如果您希望使用该功能但希望直接使用asl
或syslog
,那么您需要查看ASL_OPT_STDERR
的{{1}}选项和{{{分别为asl_open
的1}}选项。
答案 1 :(得分:3)
如果您有一个旧应用并希望看到stdout或stderr,请从终端打开该应用。您可以使用可执行文件并从命令行打开它,就像在普通的旧世界中一样:键入程序名称。然后消息将显示在终端上。
这不是对任何其他更好的建议的否定。这只是一种在不改变(旧)程序的情况下获得输出的方法。