这里相对较新,所以请原谅问题。
我目前正在使用一组特定的商用DSLR型相机(第一阶段),并且具有制造商提供的SDK。但是,SDK有两个组件-一个专门用于图像捕获,编写为Objective C框架,另一个专门用于图像处理,编写为Shell命令列表。
我想用用户界面构建一个程序,使我可以为捕获和处理布置序列。
使用Objective C框架运行相机相对简单,我刚刚使用界面构建器构建了一个Cocoa应用。但是,将其与处理引擎集成的最佳方法是什么?我似乎只能从shell运行它?
到目前为止,我已经使用NSTask调用了一些我分别编写的bash脚本,这很好用...但是现在我需要保存一些命令行输出,这些输出是在我的shell脚本返回后得到的。将文件处理为整个应用程序中的变量。
我读过的每个地方都说,没有优雅的方法可以做到这一点,而且解决该问题的方法(写入文件,从该文件读取主程序等)都存在很大的安全风险。< / p>
因此,我认为必须有一种更好的方法来集成SDK的这两部分。还是我的方法还可以,并且有一种安全的方法可以将终端输出拉到我的程序中?预先感谢。
答案 0 :(得分:0)
您可以从NSTask中读取STDOUT。这是一个入门的示例:
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];