objective-c – NSTask NSPipe – objective c命令行帮助

objective-c – NSTask NSPipe – objective c命令行帮助,第1张

概述这是我的代码: task = [[NSTask alloc] init];[task setCurrentDirectoryPath:@"/applications/jarvis/brain/"];[task setLaunchPath:@"/applications/jarvis/brain/server.sh"];NSPipe * out = [NSPipe pipe];[task 这是我的代码:
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 BUG
Xcode中存在一个错误,它会在启动了标准输出的新任务之后停止打印任何输出(它收集所有输出,但不再打印任何内容).您将要调用[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命令行帮助所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存