我正在为Swift 2中的命令行编写一个BASIC解释器,我找不到一种方法来实现简单的命令CLS(从终端清除所有文本)。我应该简单地在循环中打印空格,还是有一个我不知道的函数可以清除终端屏幕?
ebdffaop1#
可以使用以下ANSI序列:
print("\u{001B}[2J")
...其中\u{001B}是ESCAPE,[2J是清晰屏幕。
\u{001B}
ESCAPE
[2J
mu0hgdu02#
此答案仅适用于Swift 2.1或更早版本
详细说明Arc676's answer:system命令通过Mac平台上的达尔文模块导入Swift(使用其他C API)。在Linux上,Glibc取代了达尔文,将低级C API与Swift连接起来。
system
import Glibc // ... system("clear")
或者,如果system调用不明确,则显式调用Glibc的system(或Mac平台上的达尔文):
import Glibc // ... Glibc.system("clear")
lymgl2op3#
这段代码对内置的clear命令进行同步调用。这不会对readLine()造成问题,因为它使用Swift的print()函数打印clear返回的转义序列
clear
readLine()
print()
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) ?? "")
laawzig24#
将内置的clear命令与system一起使用
system("clear")
或popen(询问Google)或者,通过命令行使用AppleScript模拟按Ctrl+L:
popen
osascript -e 'tell app "terminal" to tell app "system events" to keystroke "l" using {control down}'
编辑:system在Swift的新版本中不再可用。请参见Rudolf Adamkovič's answer。
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() }
5fjcxozz6#
如果您在REPL中,只需键入: shell 透明
6条答案
按热度按时间ebdffaop1#
可以使用以下ANSI序列:
...其中
\u{001B}
是ESCAPE
,[2J
是清晰屏幕。mu0hgdu02#
此答案仅适用于Swift 2.1或更早版本
详细说明Arc676's answer:
system
命令通过Mac平台上的达尔文模块导入Swift(使用其他C API)。在Linux上,Glibc取代了达尔文,将低级C API与Swift连接起来。或者,如果
system
调用不明确,则显式调用Glibc的system
(或Mac平台上的达尔文):lymgl2op3#
这段代码对内置的
clear
命令进行同步调用。这不会对readLine()
造成问题,因为它使用Swift的print()
函数打印clear
返回的转义序列laawzig24#
将内置的
clear
命令与system
一起使用或
popen
(询问Google)或者,通过命令行使用AppleScript模拟按Ctrl+L:
编辑:
system
在Swift的新版本中不再可用。请参见Rudolf Adamkovič's answer。8qgya5xd5#
这在Swift 3.1中适用
你可以像这样创建一个带有回调的函数
5fjcxozz6#
如果您在REPL中,只需键入
: shell 透明