gpt4 book ai didi

Linux:用 Lua 表现奇怪的 tput cup

转载 作者:太空狗 更新时间:2023-10-29 12:32:43 26 4
gpt4 key购买 nike

在 Lua 中,我尝试使用 shell 命令“tput cup foo bar”移动光标,并使用“io.write('foo')”在该位置写入字符串。

os.execute('tput clear')    --clear terminal
os.execute('tput cup 2 9') --move cursor to line 2, col 9
io.write('A') --write 'A' at the cursor position
os.execute('tput cup 8 2') --move cursor to line 8, col 2
io.write('B') --write 'B' at the cursor position

但是,出于某种原因,它会在第二个光标位置(第 2 列,第 8 行)打印两个字符。

不过,当我使用 print() 而不是 io.write() 时,它会在正确的位置打印两个字符。出于显而易见的原因,我不想使用 print(),那么如何使用 io.write() 将两个字符串写入正确的位置?

最佳答案

您确实需要调用 io.flush()。 @lhf 有正确的建议。但诀窍在于您需要在代码中的正确位置使用它。

os.execute('tput clear')    --clear terminal
os.execute('tput cup 2 9') --move cursor to line 2, col 9
io.write('A') --write 'A' at the cursor position
io.flush() --*** this is what was missing
os.execute('tput cup 8 2') --move cursor to line 8, col 2
io.write('B') --write 'B' at the cursor position

输出要到终端,有两个程序竞争写入终端:Lua 和 tput。对 io.execute('tput') 的前两次调用立即写入终端。对 io.write() 的调用将字母“A”放入 Lua 的内部输出缓冲区。在我们对 io.execute('tput') 进行下一次调用之前,我们必须强制此缓冲输出进入终端。

一般来说,在调用任何写入同一输出流的外部程序之前,您应该刷新程序的输出缓冲区。否则,输出缓冲会使到达输出流的内容乱序。

关于Linux:用 Lua 表现奇怪的 tput cup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120206/

26 4 0
文章推荐: jquery - 同时使用显示 : none and display:flex;
文章推荐: html - 部分右边框被截断(附截图)