bjz*_*bjz 9 unix cocoa objective-c command-line-tool interactive-mode
好的,所以我知道你可以使用Objective-C制作一个NSTask来运行命令行工具:
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有办法与交互式命令行工具进行通信gdb.这将涉及使基于用户交互的命令输入(如run,kill或quit用gdb),然后在此基础上输出该信息反应.
您可以将 NSTask 的setStandardInput:,setStandardOutput:和setStandardError:选择器与 NSPipe 实例结合使用来与启动的程序进行通信。
例如,要读取任务的输出:
task = [[NSTask alloc] init];
[task setStandardOutput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]]; // Get standard error output too
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];
Run Code Online (Sandbox Code Playgroud)
然后,您可以获得一个NSFileHandle可用于读取任务输出的实例:
NSFileHandle *readFromMe = [[task standardOutput] fileHandleForReading];
Run Code Online (Sandbox Code Playgroud)
要设置向 gdb 发送命令的管道,您需要添加
[task setStandardInput: [NSPipe pipe]];
Run Code Online (Sandbox Code Playgroud)
在启动任务之前。然后你就得到NSFileHandle了
NSFileHandle *writeToMe = [[task standardInput] fileHandleForWriting];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |