Подтвердить что ты не робот

Как получить stdout в Console.app

Раньше я мог читать все данные stdout/stderr из приложений в Console.app. С тех пор это уже не так (данные NSLog все еще существуют). Сейчас я 10.8.

Ранее был аналогичный вопрос от 2010 года, который, похоже, не обновляется.

В SU существует также похожий вопрос, на который еще не ответил.

Изменилось ли это, т.е. stdout больше не должен регистрироваться? Или что-то сломалось в моей системе (из старого вопроса SU, это звучит так, как будто это может быть, хотя и не полезно)?

Можно ли как-то изменить его?

4b9b3361

Ответ 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, откройте приложение из терминала. Вы можете направить свой путь к исполняемому файлу и открыть его из командной строки, как в обычном, старом мире: введите имя программы. Затем сообщения появятся на терминале.

Это не отказ от любого другого, лучшего предложения. Это просто способ получить результат без изменения (старой) программы.