मेरे पास एक PHP स्क्रिप्ट है जिसमें mutliple sleep()
आदेश हैं। मैं इसे अपने आवेदन में NSTask
के साथ निष्पादित करना चाहता हूं। मेरे स्क्रिप्ट इस तरह दिखता है:एनएसटीस्क का रीयल-टाइम आउटपुट
echo "first\n"; sleep(1); echo "second\n"; sleep(1); echo "third\n";
मैं अपने काम से एसिंक्रोनस रूप से निष्पादित अधिसूचना का उपयोग कर सकते हैं:
- (void)awakeFromNib {
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/php"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"-r", @"echo \"first\n\"; sleep(1); echo \"second\n\"; sleep(1); echo \"third\n\";", nil];
[task setArguments: arguments];
NSPipe *p = [NSPipe pipe];
[task setStandardOutput:p];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskExited:) name:NSTaskDidTerminateNotification object:task];
[task launch];
}
- (void)taskExited:(NSNotification *)notif {
NSTask *task = [notif object];
NSData *data = [[[task standardOutput] fileHandleForReading] readDataToEndOfFile];
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@",str);
}
मेरे उत्पादन होता है (2 सेकंड के बाद, निश्चित रूप से):
2011-08-03 20:45:19.474 MyApp[3737:903] first
second
third
मेरा सवाल है: मुद्रित होने के तुरंत बाद मैं तीन शब्द कैसे प्राप्त कर सकता हूं?
मैंने कोशिश की, लेकिन यह केवल "पहले" लॉग करता है। कार्यकाल की समाप्ति पर "दूसरा" और "तीसरा" लॉग है ... – akashivskyy
'-receiveData' में अतिरिक्त 'readInBackgroundAndNotify' डालकर इसे हल किया गया। विचार के लिए धन्यवाद! – akashivskyy
मैंने थोड़ी देर के लिए संघर्ष के बाद कोड अपडेट किया। आपको 'readInBackgroundAndNotify'' नहीं, 'WaitForDataInBackgroundAndNotify'' की आवश्यकता है। – citelao