使用响应从cocoa(obj.c)执行shell脚本

Kuk*_*osk 4 macos bash shell cocoa objective-c

我有类似的东西:

- (NSString *)unixSinglePathCommandWithReturn:(NSString *)command
{
NSPipe *newPipe = [NSPipe pipe];
NSFileHandle *readHandle = [newPipe fileHandleForReading];

NSTask *unixTask = [[NSTask alloc] init];
[unixTask setStandardOutput:newPipe];
[unixTask setLaunchPath:@"/bin/sh"];
[unixTask setArguments:[NSArray arrayWithObjects:@"-c", command , nil]]; 
[unixTask launch];
[unixTask waitUntilExit];

NSString *output = [[NSString alloc] initWithData:[readHandle readDataToEndOfFile] encoding:NSUTF8StringEncoding];

return output;
}
Run Code Online (Sandbox Code Playgroud)

但它没有按预期工作.我点击按钮时调用它.如果我删除'waitUntilExit'的行,它按预期工作,但只有一次.当它在那里时,它不起作用.我还尝试了一些基本的命令,比如'ls''ping -c1 google.com'和类似的东西,但我无法以某种方式让它工作.如果你有一些不同的方法在cocoa中运行shell脚本并收到响应,那么现在就让我吧.谢谢你们 :)

小智 5

嘿,库科斯克.关于运行NSTask时的问题,CocoaDev有一个评论NSLog().修复是stdin在启动任务之前设置管道:

[task setStandardInput:[NSPipe pipe]];
Run Code Online (Sandbox Code Playgroud)

如果您NSLog()仅依靠检查任务是否已运行,则可能会解决您的问题.或者,您可以尝试output在GUI中显示而不是使用NSLog().