作爲一個學習項目我正在爲Apache stresstesting命令行工具「ab」編寫一個簡單的gui。它需要一個完整的URL,包括一個像index.html或simular這樣的文件名作爲其參數之一。如果未指定文件名「ab」回顯「URL無效」並顯示可用標誌的列表。使用NSTask時的處理錯誤
我想抓住這個「錯誤」,並嘗試使用NSTasks standarderror輸出。無法真正實現它的工作。這是否會分類爲會導致標準錯誤的錯誤?
除了在啓動NSTask之前驗證URL輸入之外,你認爲我可以防止或更確切地捕獲這個錯誤嗎?
我簡單的代碼:
- (void) stressTest:(NSString *)url withNumberOfRequests:(int)requests sendSimultaneously:(int)connections {
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *abPath = [[mainBundle bundlePath] stringByAppendingString:@"/Contents/Resources/ab"];
NSString* requestsStr = [NSString stringWithFormat:@"%i", requests];
NSString* connectionsStr = [NSString stringWithFormat:@"%i", connections];
// Init objects for tasks and pipe
NSTask *abCmd = [NSTask new];
NSPipe *outputPipe = [NSPipe pipe];
[abCmd setLaunchPath:abPath];
[abCmd setArguments:[NSArray arrayWithObjects:@"-n", requestsStr, @"-c", connectionsStr, url, nil]];
[abCmd setStandardOutput:outputPipe];
[abCmd launch];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readCompleted:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];
[[outputPipe fileHandleForReading] readToEndOfFileInBackgroundAndNotify];
}
- (void)readCompleted:(NSNotification *)notification {
NSString * tempString = [[NSString alloc] initWithData:[[notification userInfo] objectForKey:NSFileHandleNotificationDataItem] encoding:NSASCIIStringEncoding];
[resultTextOutlet setString:tempString];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadToEndOfFileCompletionNotification object:[notification object]];
}
您可以調試並告訴我們,錯誤的確切位置。我認爲這是您設置發射路徑的時間點,但可以肯定。 – ipinak
當我午餐NSTask時發生錯誤。可以在OSX終端中通過鍵入ab -c 1 -n 1 htp://www.example.com來重複該操作。 Ab在URL中請求一個文件名。我甚至不確定它會被歸類爲可以傳送的「錯誤」嗎? –
你可以管它,但你需要從'main()' – ipinak