PRHTask@aufflick 0.0.1

PRHTask@aufflick 0.0.1

测试已测试
语文语言 Obj-CObjective C
许可证 BSD
发布最后发布2014年12月

Mark Aufflick维护。



  • Peter Hosey和Mark Aufflick

PRHTask

这是Peter Hosey的Mercurial仓库的一个分支,修复了这个错误

它是什么

NSTask的替代品。应该适用于大多数(最终所有)目的。

如果NSTask中有您需要而这个版本没有实现的功能,请向问题跟踪器提交请求。如果您实现了它,请提交补丁。

特性

  • 输出累积:任务可以(可选的)读取stdout和stderr的数据。在进程完成后,您可以收集它作为原始数据或字符串(从UTF-8解码)。
  • 完成块:您可以设置一个块,在任务成功终止或不正常终止时调用。您可以在每个块上设置不同的块,也可以在两个块上设置相同的块。
  • 空格修剪:当使用输出累积时,如果您要求以字符串形式输出,默认情况下,它将带有任何开头和结尾的空白字符去除(您可以关闭此功能)。
  • 轻松将stdin、stdout或stderr设置到/dev/null。
  • 所有属性都有正式的属性。
  • 如currentDirectoryURL、argumentsIncludingProgramName和taskWithProgramName:arguments:等便利性。

示例

来自测试程序

    PRHTask *task = [PRHTask taskWithProgramName:@"echo" arguments:@"I am the very model of a modern Major-General", nil];
        task.accumulatesStandardOutput = YES;

        task.successfulTerminationBlock = ^(PRHTask *completedTask) {
                NSLog(@"Completed task: %@ with exit status: %i", completedTask, completedTask.terminationStatus);
                NSLog(@"Accumulated output: %@", [task outputStringFromStandardOutputUTF8]);
        };
        task.abnormalTerminationBlock = ^(PRHTask *completedTask) {
                NSLog(@"Task exited abnormally: %@ with exit status: %i", completedTask, completedTask.terminationStatus);
        };

        [task launch];

缺少的功能

一些NSTask的功能尚未实现。(您可以帮助!)这些包括

  • standardInput:您可以将其置空,但还不能将其连接到管道或FD。
  • launchedTaskWithLaunchPath:arguments:: 这不是很实用,所以我没有去实现。
  • 挂起和恢复
  • terminationReason(“它是退出还是被杀死”的方法,不要与terminationStatus混淆,terminationStatus是支持的)

将永远不实现的功能包括

  • NSTaskDidTerminateNotification(块更佳)
  • waitUntilExit(这总是一个更差的选择;终止块是一个更好的解决方案)