Я хочу перенаправить стандартный вывод в NSTextView.
Ваш собственный стандартный вывод?
Может ли это также работать с выходами подпроцессов?
Конечно.
Какой может быть лучший способ достичь этого?
Файловые дескрипторы - ваш друг здесь.
Создайте канал (используя NSPipe или pipe (2) ) и dup2 его конец записи на STDOUT_FILENO
. При вызове подпроцессов не устанавливайте их стандартный вывод; они унаследуют ваш стандартный вывод, который является вашей трубкой. (Возможно, вы захотите закрыть конец чтения в подпроцессе. Я не уверен, понадобится ли это, попробуйте и выясните. Если это так, вам нужно будет использовать fork
и exec
и закройте конец чтения между ними.)
Асинхронно читать с конца чтения канала в фоновом режиме, используя kevent
или NSFileHandle. Когда поступают новые данные, интерпретируйте их, используя некоторую кодировку, и добавьте их к содержимому текстового представления.
Если текстовое представление находится в режиме прокрутки, вы должны проверить положение прокрутки, прежде чем добавлять к нему. Если это было в конце, вы, вероятно, захотите вернуться к концу после добавления.