Пример NSTask и NSPipe для связи с командной строкой target-c - PullRequest
4 голосов
/ 09 июля 2010

Может кто-нибудь показать краткий пример того, как использовать NSTask и NSPipe совместно для этого:

Charlie AI - запустить через терминал, чтобы соединиться с AI

Я хочу создатьхороший графический интерфейс для него, используя xcode и цель c.Я хочу иметь 2 NSTextFields для ответа Чарли и ввода пользователя.Затем нажмите кнопку «Отправить», чтобы отправить пользовательский ввод в командную строку, затем получите ответ Чарли и опубликуйте его в NSTextField.

Я могу справиться с графическим интерфейсом (NSTextField, т. Д.), Но мне нужна помощь с частью кодирования объективного кода.

Спасибо!

Илия

Ответы [ 2 ]

4 голосов
/ 10 июля 2010

У Apple есть хороший пример кода, который показывает, как сделать большую часть этого ... http://developer.apple.com/mac/library/samplecode/Moriarity/

TaskWrapper.m содержит все умные вещи, но, так как вы хотите иметь возможность отправлять данные в задачу, вам нужно немного ее расширить, например:

[task setStandardInput: [NSPipe pipe]];

Чтобы отправить входные данные для задачи, вы можете сделать:

[[[task standardInput] fileHandleForWriting] writeData: ...];

Чтобы преобразовать значение NSTextField в данные, вы можете сделать что-то вроде этого:

NSData *data = [[inputTextField stringValue] dataUsingEncoding:NSUTF8StringEncoding];

... и для установки текущего рабочего каталога для вашей подзадачи используйте [NSTask setCurrentDirectoryPath:]

, например

[task setCurrentDirectoryPath:@"/blah/blah"];
[task setLaunchPath:@"/blah/blah/server.sh"];

.... (other setup code)

[task launch];
1 голос
/ 17 августа 2010

Существует также пример кода AMShellWrapper, который улучшает мориарность.

http://www.harmless.de/cocoa-code.php

...