あなたがstandardOutput
プロパティを使用してNSTask
からNSPipe
を接続し、データ使用可能通知を受け取るために登録する必要があります。
@interface TaskMonitor: NSObject
@property NSPipe *outputPipe;
@end
@implementation TaskMonitor
-(void)captureStandardOutput:(NSTask *)process {
self.outputPipe = [NSPipe new];
process.standardOutput = self.outputPipe;
//listen for data available
[self.outputPipe.fileHandleForReading waitForDataInBackgroundAndNotify];
[[NSNotificationCenter defaultCenter] addObserverForName:NSFileHandleDataAvailableNotification object:self.outputPipe.fileHandleForReading queue:nil usingBlock:^(NSNotification * _Nonnull note) {
NSData *output = self.outputPipe.fileHandleForReading.availableData;
NSString *outputString = [[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
// do something with the string chunk that has been received
NSLog(@"-> %@",outputString);
});
//listen again...
[self.outputPipe.fileHandleForReading waitForDataInBackgroundAndNotify];
}];
}
@end
こんにちは私はこれを試しましたが、問題があります。それはコマンド全体を実行し、出力はNSLoggedを取得します。NSTaskで正常に実行されるように出力され、*の後ろには、その後のデータなしでログに無限の ' - >'を付けます。この ' - ><!DOCTYPE html>'です。私が言ったように、すべてのデータに対して1つの ' - >'が必要なので、実際にUIを更新することができます。 –
何らかの理由でNvmがログ上で動作していませんでしたが、UIに接続したときに機能しました! –