Как получить stdout в Console.app
Раньше я мог читать все данные stdout/stderr из приложений в Console.app. С тех пор это уже не так (данные NSLog все еще существуют). Сейчас я 10.8.
Ранее был аналогичный вопрос от 2010 года, который, похоже, не обновляется.
В SU существует также похожий вопрос, на который еще не ответил.
Изменилось ли это, т.е. stdout больше не должен регистрироваться? Или что-то сломалось в моей системе (из старого вопроса SU, это звучит так, как будто это может быть, хотя и не полезно)?
Можно ли как-то изменить его?
Ответы
Ответ 1
До Горного льва все процессы, управляемые launchd
, включая обычные приложения, содержали дескрипторы файлов stdout и stderr, отправленные в системный журнал. В Mountain Lion и выше, stdout и stderr никуда не идут для управляемых приложений launchd
. Там будут только сообщения, явно отправленные в системный журнал.
Если вы пишете приложение и хотите, чтобы какой-то вывод отображался в консоли, затем примените API, построенный на syslog(3)
или asl(3)
. NSLog
- один из таких API, и у него есть преимущество входа в stderr, чтобы вы могли легко видеть свой результат независимо от того, как вы запустили приложение. Если вам нужна эта функциональность, но вы хотите напрямую использовать asl
или syslog
, тогда вам нужно будет выбрать опцию ASL_OPT_STDERR
для asl_open
и LOG_PERROR
для openlog
соответственно.
Ответ 2
Если у вас есть старое приложение и вы хотите увидеть stdout или stderr, откройте приложение из терминала. Вы можете направить свой путь к исполняемому файлу и открыть его из командной строки, как в обычном, старом мире: введите имя программы. Затем сообщения появятся на терминале.
Это не отказ от любого другого, лучшего предложения. Это просто способ получить результат без изменения (старой) программы.