Поместите `stdout` в` NSTextView` во время выполнения команды - PullRequest
1 голос
/ 24 апреля 2010

Я создаю приложение Cocoa, для которого нужно будет выполнить команду rails.Эта команда генерирует выходные данные и передает их в stdout.Я хочу показать этот вывод пользователю в NSTextView (поэтому в основном поток stdout в NSTextView).Мое приложение не должно зависать во время выполнения команды (например, для выполнения команды git требуется много времени).Меня не особо волнует, как мне следует запускать команду, если я могу установить рабочий каталог.

Использование Ruby-фреймворка для Cocoa не вариант, так как я должен сделать это и дляРубиновые команды, такие как git.

Кто-нибудь может мне помочь?Спасибо

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

Вам нужно будет использовать NSTask класс.

NSTask       * task;
NSPipe       * pipe;
NSFileHandle * fileHandle;

task       = [ [ NSTask alloc ] init ];
pipe       = [ NSPipe pipe ];
fileHandle = [ pipe fileHandleForReading ];

[ fileHandle readInBackgroundAndNotify ];
[ task setLaunchPath: @"/bin/ls" ];
[ task setStandardOutput: pipe ];
[ task setStandardError: pipe ];
[ task launch ];

Затем вы можете использовать дескриптор файла, чтобы получить стандартный вывод.
Рабочий каталог может быть установлен с помощью метода setCurrentDirectoryPath .
Аргументы могут быть установлены с помощью метода setArguments .

0 голосов
/ 25 февраля 2011

если вам нужно использовать данные во время их чтения, используйте подход с NSNotification, который описан в этой записи на cocoabuilder.com.

По сути, это устанавливает объект NSPipe, подключает стандартный вывод NSTask к каналу и прослушивает NSFileHandleReadToEndOfFileCompletionNotification канала для обработки данных, которые были переданы в канал.

...