NSTask 未返回

发布于 2024-12-08 10:54:18 字数 703 浏览 0 评论 0原文

我使用 NSTask 如下:

    NSTask *task;
    task = [[NSTask alloc] init];

    [task setLaunchPath:@"/bin/bash"];

    NSMutableString *script = ... // actual script here, works fine

    NSArray *args = [NSArray arrayWithObjects:@"-l",
                     @"-c",
                     script,
                     nil];

    [task setArguments: args];

    NSPipe *pipe = [NSPipe pipe];
    [task setStandardOutput:pipe];

    [task launch];

    NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];

    [task waitUntilExit];
    [task release];

到目前为止工作正常,唯一的问题是,不知何故,在第一次达到这一点后不再调用该方法。如果我不启动该任务,则一切正常,因此该任务似乎以某种方式阻止了进一步的执行。

有人知道为什么会这样吗?任何提示表示赞赏!

I use a NSTask as follows:

    NSTask *task;
    task = [[NSTask alloc] init];

    [task setLaunchPath:@"/bin/bash"];

    NSMutableString *script = ... // actual script here, works fine

    NSArray *args = [NSArray arrayWithObjects:@"-l",
                     @"-c",
                     script,
                     nil];

    [task setArguments: args];

    NSPipe *pipe = [NSPipe pipe];
    [task setStandardOutput:pipe];

    [task launch];

    NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];

    [task waitUntilExit];
    [task release];

Works fine so far, only thing is, that somehow, the method isn't called anymore after first reaching this point. If I don't launch the task, everything's ok, so it would seem, that the task somehow blocks further execution.

Has anybody an idea, why that would be? Any hints appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半城柳色半声笛 2024-12-15 10:54:18

通过运行循环来更好地控制任务,您可以在循环中读取数据、检查是否超时等:

while ([task isRunning])
{
    NSData* data = [[pipe fileHandleForReading] availableData];
    if ([data length] > 0)
    {
        //process the data
    }

    // Run current runloop in default mode; check the timeout; interrupt the task if needed
}

Get more control on the task by running a loop where you can read the data, check if it's timed out , etc.:

while ([task isRunning])
{
    NSData* data = [[pipe fileHandleForReading] availableData];
    if ([data length] > 0)
    {
        //process the data
    }

    // Run current runloop in default mode; check the timeout; interrupt the task if needed
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文