lab*_*b12 3 macos terminal cocoa objective-c nstask
我在我的Cocoa应用程序中运行一个简单的grep命令,如下所示:
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/grep"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"foo", @"bar.txt", nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"grep returned:\n%@", string);
[string release];
[task release];
Run Code Online (Sandbox Code Playgroud)
但是,我有点好奇知道如何通过终端输入的命令,这些命令不会发出输出并且不会立即执行,除非退出类似Control+之类的命令C可以使用此技术运行.像运行java -jar server.jar一直运行的地方,直到退出会话.如果在启动命令后会话未自动结束,我该如何做?
我是否只需要评论它发布的部分NSTask?任何建议都会很好!
小智 7
NSTask与不立即退出的基础程序一起使用时:
您不应该使用,-[NSFileHandle readDataToEndOfFile]因为没有文件结尾.相反,您应该使用-[NSFileHandle readInBackgroundAndNotify]在后台读取该任务的标准输出管道,并在数据可用时通知;
-[NSTask release]只有在确定任务不再运行时才应使用.在这种情况下,在释放任务之前,您应该向其标准输入发送导致底层程序退出的命令(例如,等同于control- 的字符d),或者发送它-terminate或-interrupt.
-waitUntilExit除非您已经生成了一个辅助线程来处理该任务,否则不应该使用它.
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |