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

roejwanj  于 2023-09-30  发布在  Swift
关注(0)|答案(6)|浏览(125)

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

ebdffaop

ebdffaop1#

可以使用以下ANSI序列:

print("\u{001B}[2J")

...其中\u{001B}ESCAPE[2J是清晰屏幕。

mu0hgdu0

mu0hgdu02#

此答案仅适用于Swift 2.1或更早版本

详细说明Arc676's answer
system命令通过Mac平台上的达尔文模块导入Swift(使用其他C API)。在Linux上,Glibc取代了达尔文,将低级C API与Swift连接起来。

import Glibc

// ...

system("clear")

或者,如果system调用不明确,则显式调用Glibc的system(或Mac平台上的达尔文):

import Glibc

// ...

Glibc.system("clear")
lymgl2op

lymgl2op3#

这段代码对内置的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) ?? "")
laawzig2

laawzig24#

将内置的clear命令与system一起使用

system("clear")

popen(询问Google)
或者,通过命令行使用AppleScript模拟按Ctrl+L:

osascript -e 'tell app "terminal" to tell app "system events" to keystroke "l" using {control down}'

编辑:system在Swift的新版本中不再可用。请参见Rudolf Adamkovič's answer

8qgya5xd

8qgya5xd5#

这在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()
}
5fjcxozz

5fjcxozz6#

如果您在REPL中,只需键入
: shell 透明

相关问题