Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中清除终端屏幕?_Swift_Macos_Command Line_Terminal - Fatal编程技术网

如何在Swift中清除终端屏幕?

如何在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

我正在用Swift 2为命令行编写一个基本的解释器,但我找不到实现简单命令CLS(从终端清除所有文本)的方法。我应该简单地在循环中打印空格,还是有一个我不知道的功能可以清除终端屏幕

将内置的
清除
命令与
系统一起使用

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) ?? "")