task = [[NSTask alloc] init];[task setCurrentDirectoryPath:@"/applications/jarvis/brain/"];[task setLaunchPath:@"/applications/jarvis/brain/server.sh"];NSPipe * out = [NSPipe pipe];[task setStandardOutput:out];[task launch];[task waitUntilExit];[task release];NSfileHandle * read = [out fileHandleForReading];NSData * dataRead = [read readDataToEndOffile];Nsstring * stringRead = [[[Nsstring alloc] initWithData:dataRead enCoding:NSUTF8StringEnCoding] autorelease];
所以我试图复制这个:
cd /applications/jarvis/brain/./server.sh
但是在目标c中使用NSTask.
由于某些原因,当我运行这个代码,stringRead,什么都不返回.当我启动.sh文件时,应该返回什么终端返回.正确?
有任何想法吗?
以利亚
解决方法 Xcode BUGXcode中存在一个错误,它会在启动了标准输出的新任务之后停止打印任何输出(它收集所有输出,但不再打印任何内容).您将要调用[task setStandardinput:[NSPipe pipe]]来使其再次显示输出(或者,将任务打印到stderr而不是stdout).
最终代码建议:
NSTask *server = [NSTask new];[server setLaunchPath:@"/bin/sh"];[server setArguments:[NSArray arrayWithObject:@"/path/to/server.sh"]];[server setCurrentDirectoryPath:@"/path/to/current/directory/"];NSPipe *outputPipe = [NSPipe pipe];[server setStandardinput:[NSPipe pipe]];[server setStandardOutput:outputPipe];[server launch];[server waitUntilExit]; // Alternatively,make it asynchronous.[server release];NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOffile];Nsstring *outputString = [[[Nsstring alloc] initWithData:outputData enCoding:NSUTF8StringEnCoding] autorelease]; // autorelease optional,depending on usage.总结
以上是内存溢出为你收集整理的objective-c – NSTask NSPipe – objective c命令行帮助全部内容,希望文章能够帮你解决objective-c – NSTask NSPipe – objective c命令行帮助所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)