- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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/
我是一名优秀的程序员,十分优秀!