我正在Objective-C中创建一个基于控制台的应用程序,它依赖于能够定期清除控制台。如何才能做到这一点?我在SO和Google上看到的只是让开发人员用X-Code清除控制台的方法,但不。
我在Yahoo!上找到的一个解决方案Answers告诉我要执行以下操作,但由于无法找到文件而无法运行:
NSTask *task;
task = [[NSTask alloc]init];
[task setLaunchPath: @"/bin/bash"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"clear", nil];
[task setArguments: arguments];
[task launch];
[task waitUntilExit];
答案 0 :(得分:6)
尝试使用:
system( "clear" );
重要标题:
#include <stdlib.h>
提示: Objective-C仍然是C,对吧?
更新:
如果未设置“TERM环境变量。”错误:
1)直接从你的终端运行程序(或者在Xcode中测试它时忽略错误;无论如何它应该在正常的终端运行,是吗?)
2)在Scheme的设置中设置TERM变量。 要什么?只需在您的终端中运行它,看看应该是什么“TERM”:
DrKameleons-MacBook-Pro:Documents drkameleon$ echo $TERM
xterm-256color
答案 1 :(得分:4)
在不产生子进程的情况下执行此操作的方法是使用ncurses。
#include <curses.h>
#include <term.h>
#include <unistd.h>
int main(void)
{
setupterm(NULL, STDOUT_FILENO, NULL);
tputs(clear_screen, lines ? lines : 1, putchar);
}
使用-lncurses
进行编译。
setupterm()
来电只需要完成一次。之后,使用tputs()
调用清除屏幕。
答案 2 :(得分:3)
为什么/bin/bash
?
只是做:
NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/clear" arguments:[NSArray array]];
或者,使用C方式:
#include <stdlib.h>
...
system("/usr/bin/clear");
...
答案 3 :(得分:1)
您可以使用Apple脚本
tell application "Console"
activate
tell application "System Events"
keystroke "k" using command down
end tell
end tell
使用NSAppleScript类从obj-C程序执行applescript。
NSAppleScript *lClearDisplay = [[NSAppleScript alloc] initWithSource:@"tell application \"Console\"\n \
activate\n \
tell application \"System Events\"\n \
keystroke \"k\" using command down\n \
end tell\n \
end tell "];
NSDictionary *errorInfo;
[lClearDisplay executeAndReturnError:&errorInfo];
注意:强>
如果Apple更改或删除⌘k作为清除显示的关键命令,则会破坏脚本。