macOS:如何使用终端在启动后重定向进程的 STDERR / STDOUT?

2024-01-11

在 macOS 中,通常可以通过直接在终端中执行二进制文件来执行进程,从而获得一些可观的控制台/shell 输出:

/Applications/SOME_APPLICATION.app/Contents/MacOS/SOME_APPLICATION

这对于调试和捕获发生的错误时非常有用。随着 Catalina (10.15) 的引入,不鼓励通过脚本等方式直接执行应用程序,并导致各种问题,最终需要使用/usr/bin/open.

进程启动后如何重定向 STDERR / STDOUT?


关于这个话题已经有一些讨论以前用于Linux https://stackoverflow.com/a/593764/320681,但目前尚不清楚其中一些是否适用于 macOS。

reptyr https://github.com/nelhage/reptyr如果它可以重新用于 macOS,那就太棒了,因为它已经主要适用于 FreeBSD。


这个答案来自 2013 年,但大部分仍然相关 https://stackoverflow.com/questions/13104588/how-to-get-stdout-into-console-app.

在 Mountain Lion 之前,所有进程均由 launchd 管理,包括 常规应用程序有其 stdout 和 stderr 文件描述符 转发到系统日志。在 Mountain Lion 及以上版本中,stdout 和 stderr 对于启动的托管应用程序无处可去。仅消息 显式发送到系统日志将在那里结束。

如果您正在编写应用程序并希望显示一些输出 在控制台中,然后采用基于 syslog(3) 或 asl(3) 构建的 API 反而。 NSLog 就是这样的 API 之一,它的优点是可以记录到 stderr 也是如此,无论您如何操作,您都可以轻松查看输出 启动您的应用程序。如果您想要该功能但想要 直接使用 asl 或 syslog 那么你需要查看 asl_open 的 ASL_OPT_STDERR 选项和 LOG_PERROR 选项 分别打开日志。

基本上,当您双击应用程序时(与/usr/bin/open)没有标准输出/标准错误。开发人员应将任何相关输出/错误发送到可用的日志记录 API(例如 NSLog)。

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

macOS:如何使用终端在启动后重定向进程的 STDERR / STDOUT? 的相关文章

随机推荐