SDK со смешанной оболочкой и компонентами Objective C - PullRequest
0 голосов
/ 05 октября 2018

Относительно новый здесь, поэтому, пожалуйста, извините за тупой вопрос.

В настоящее время я работаю с определенным набором коммерческих камер типа DSLR (Phase One), и у меня есть SDK, предоставленный производителем.Однако в SDK есть два компонента: один предназначен для захвата изображений, написанных как среда Objective C, а другой - для обработки изображений, написанных в виде списка команд оболочки.

Я хотел бы создать программу с пользовательским интерфейсом, которая позволит мне размещать последовательности как для захвата, так и для обработки.

Запуск камеры с Objective C Framework относительно прост, я только что создал приложение Cocoa спостроитель интерфейсаНо как лучше интегрировать его с процессором, который, как мне кажется, запускается только из оболочки?

До сих пор я использовал NSTask для вызова некоторых скриптов bash, которые я написал отдельно, иэто работало нормально ... но теперь мне нужно сохранить некоторые выходные данные командной строки, которые я получаю из своих сценариев оболочки после того, как они обработали файлы как переменные в общем приложении.

Везде, где я читалговорит, что не существует элегантного способа сделать это, и что способы обхода этого (запись в файл, чтение основной программы из этого файла и т. д.) представляют большую угрозу безопасности.

Так что я 'Я думаю, что должен быть лучший способ объединить эти две половины SDK.Или мой подход в порядке, и есть безопасный способ вставить вывод терминала в мою программу?Заранее спасибо.

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете прочитать STDOUT из NSTask.Вот пример для начала:

NSPipe  *readPipe=NSPipe.pipe;

readPipe.fileHandleForReading.readabilityHandler=^(NSFileHandle *fh){

    NSData  *data=fh.availableData;

    if(!data)
    {
        NSLog(@"Script STDOUT closed!");

        fh.readabilityHandler=NULL;

        return;
    }

    // process the data here
    NSString *s=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    // NOTE: there is no guarantee what kind of chunk size your data
    // comes in! You may need to concatenate strings until it is complete
};


NSTask  *task=NSTask.new;

// set up your task as normal

task.standardOutput=readPipe;

[task launch];
...