bash - 具有混合 shell 和 Objective C 组件的 SDK
问题描述
这里相对较新,所以请原谅这个愚蠢的问题。
我目前正在使用一组特定的商用 DSLR 型相机(第一阶段),并拥有制造商提供的 SDK。但是,SDK 有两个组件 - 一个专用于图像捕获,编写为 Objective C 框架,另一个专用于图像处理,编写为 shell 命令列表。
我想构建一个带有用户界面的程序,允许我为捕获和处理设置序列。
使用 Objective C 框架运行相机相对简单,我刚刚使用界面生成器构建了一个 Cocoa 应用程序。但是将它与处理引擎集成的最佳方法是什么,我似乎只能从外壳运行?
到目前为止,我已经使用 NSTask 调用了一些我单独编写的 bash 脚本,而且效果很好......但是现在我需要保存一些命令行输出,这些输出是在我的 shell 脚本处理完文件后返回的作为整个应用程序中的变量。
我读过的所有地方都说没有优雅的方法可以做到这一点,并且解决它的方法(写入文件,从该文件读取主程序等)是很大的安全风险。
所以我认为必须有更好的方法来集成 SDK 的这两部分。还是我的方法没问题,并且有一种安全的方法可以将终端输出拉到我的程序中?提前致谢。
解决方案
您可以从 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];
推荐阅读
- javascript - 如果我使用 ajax 向 dom 添加新元素,我如何使用 url 查询字符串来做同样的事情?
- http - 在互联网上,当服务器处于最大容量时,请求会发生什么
- python - Azure Function Python docker 容器:找不到用于此绑定的 Azure 存储连接字符串
- python - Kivy问题中的中心单选按钮
- php - 从 mailer.php 提交的表单进入空白页面。可能重定向到以前的 html 页面?
- java - Eclipse 将库导出到 jar 中
- javascript - 简单的javascript函数不返回值
- powershell - 无法更改控制台颜色
- python - 在当前 python 文件中运行 python 脚本
- android - Xamarin 代码在 Android 上运行良好,但在 iOS 上却不行