如何在Swift中清除终端屏幕?
我正在用Swift 2为命令行编写一个基本的解释器,但我找不到实现简单命令CLS(从终端清除所有文本)的方法。我应该简单地在循环中打印空格,还是有一个我不知道的功能可以清除终端屏幕 将内置的如何在Swift中清除终端屏幕?,swift,macos,command-line,terminal,Swift,Macos,Command Line,Terminal,我正在用Swift 2为命令行编写一个基本的解释器,但我找不到实现简单命令CLS(从终端清除所有文本)的方法。我应该简单地在循环中打印空格,还是有一个我不知道的功能可以清除终端屏幕 将内置的清除命令与系统一起使用 system("clear") 或popen(询问谷歌) 或者,通过命令行使用AppleScript模拟按下Ctrl+L: osascript -e 'tell app "terminal" to tell app "system events" to keystroke "l" u
清除命令与系统一起使用
system("clear")
或popen
(询问谷歌)
或者,通过命令行使用AppleScript模拟按下Ctrl+L:
osascript -e 'tell app "terminal" to tell app "system events" to keystroke "l" using {control down}'
编辑:系统
在较新版本的Swift中不再可用。请参阅。您可以使用以下ANSI序列:
print("\u{001B}[2J")
。。。其中\u{001B}
为转义
,[2J
为清晰屏幕。此答案仅适用于Swift 2.1或更早版本
详细说明:
system
命令通过Mac平台上的Darwin模块(与其他C API一起)导入Swift。在Linux上,Glibc取代Darwin,将低级C API连接到Swift
import Glibc
// ...
system("clear")
或者,如果系统
调用不明确,则显式调用Glibc的系统
(或Mac平台上的Darwin):
这在Swift 3.1中适用于我
var clearScreen = Process()
clearScreen.launchPath = "/usr/bin/clear"
clearScreen.arguments = []
clearScreen.launch()
clearScreen.waitUntilExit()
您可以创建一个具有如下回调的函数
func clearScreen(completion:@escaping (Bool) -> () ) {
let clearScreen = Process()
clearScreen.launchPath = "/usr/bin/clear"
clearScreen.arguments = []
clearScreen.terminationHandler = { task in completion(true) }
clearScreen.launch()
clearScreen.waitUntilExit()
}
此代码对内置的clear
命令进行同步调用。这不会导致readLine()
出现问题,因为它使用Swift的print()
函数打印clear
返回的转义序列
var cls = Process()
var out = Pipe()
cls.launchPath = "/usr/bin/clear"
cls.standardOutput = out
cls.launch()
cls.waitUntilExit()
print (String(data: out.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.utf8) ?? "")
如何使用system(“clear”)
或类似工具(例如使用popen
)?或者,使用AppleScript(或通过命令行模拟按下Ctrl-L)怎么样?@Arc676是的,这正是我想要的,谢谢。出于好奇,你从哪里知道这个命令的?哪个命令?osascript
?比硬编码更好-。唯一对我有效的答案。MacBook Pro(视网膜,15英寸,2014年年中)OS X El Capitan。这是因为Swift 3中没有系统
。我会看看我能做些什么来更新我的答案,以使用posix_spawn
API或NSTask
。你知道为什么我使用它时会打印[2J
而不是清除吗?@BenOng我发现这在标准终端窗口中是有效的,但会打印“[2J”如果您使用的是内置于Xcode中的控制台。Xcode终端也无法正确打印颜色,因此我猜这只是从IDE运行控制台应用程序时的一般ANSI解释问题。请尝试存档您的构建并独立运行。使用Swift 3,我将获得”系统“在Swift中不可用:请使用posix_spawn API或NSTask,这在终端中有效。但如果您尝试清除Xcode中的控制台屏幕,则会给出未设置的术语环境变量。
var cls = Process()
var out = Pipe()
cls.launchPath = "/usr/bin/clear"
cls.standardOutput = out
cls.launch()
cls.waitUntilExit()
print (String(data: out.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.utf8) ?? "")