swift终端无法打印



在我的终端(zsh)中,这段代码不打印任何内容

import Foundation
while (true){
print(".", terminator: "")
sleep(1)
print(String(Character(Unicode.Scalar(8))), terminator: "")
}

print执行缓冲(参见这个和这个),因此您要求它打印的内容不会被打印(留在缓冲区中),直到缓冲区被刷新。(相关)当,例如,一个新的行字符被打印出来,或者当你的程序结束时,缓冲区被刷新。但在代码中,这两件事都不会发生,缓冲区也不会刷新,因此不会打印任何内容。

C函数fflush刷新一个给定的文件句柄,您可以使用它来刷新stdout:

while (true){
print(".", terminator: "")
fflush(stdout)
sleep(1)
print(String(Character(Unicode.Scalar(8))), terminator: "")
fflush(stdout)
}

(FileHandle.standardOutput.synchronize()据称是这样做的更快速的方式,但它似乎不适合我)

现在你应该看到一个不闪烁的点。这是因为在打印网点和打印退格之间只需要等待1秒,而在打印退格和打印网点之间根本不需要等待。你应该在一次迭代中等待两次。

还有一个问题是,只是打印退格不足以删除点。打印退格只是将光标移回。您必须在那里打印另一个空白字符来替换点,但是现在光标向右移动了一个空格,因此在打印下一个点时,您还需要打印退格。

while (true){
sleep(1)
print(".", terminator: "")
fflush(stdout)
sleep(1)
print("u{0008} u{0008}", terminator: "")
fflush(stdout)
}

另一种擦除点的方法是使用VT100转义码:

print("u{001B}[2Ku{001B}[1D", terminator: "")

相关内容

  • 没有找到相关文章

最新更新