0

NSTask から返されたデータを読み取ろうとすると、ハングが発生し、返されません。実行中のスクリプトが実際に stdout と stderr の両方にデータを返すことを確認しました。これは、1 行を stdout に送信し、もう 1 行を stderr に送信する単純な 2 行のシェル スクリプトです。

NSLog出力は言う

取得したハンドル: <NSConcreteFileHandle: 0x10010a800>

そして、それはただハングします。これは私が使用しているコードです。

    NSPipe *stderr = [NSPipe pipe];
    NSPipe *stdout = [NSPipe pipe];

    NSTask *task = [[NSTask alloc] init];
    task.standardError = stderr;
    task.standardOutput = stdout;
    task.standardInput = [NSPipe pipe];
    task.launchPath = @"/tmp/f";

    [task launchPath];
    [task waitUntilExit];

    NSFileHandle *fh = [stderr fileHandleForReading];

    NSLog(@"Got handle: %@", fh);

    [fh readDataToEndOfFile];

    NSLog(@"Read it");
4

2 に答える 2

0

トムは正しいですが、呼び出しを試みる前にタスクを起動する必要もありますreadDataToEndOfFile

于 2020-12-18T08:18:10.530 に答える