Lua string.format 和使用换行符或控制字符

我正在尝试使用 NodeMCU 执行串口输出的 string.format。

我正在尝试使用以下函数

uart.write(0,string.format("loop %03d local: %02d | gmt %02d:%02d:%02d local %02d/%02d/%04d\n",loops,timezonetime,gmthours,gmtmins,gmtsecs,Nmonth,Nday,Nyear))

但是\n被忽略,文本被连接起来。

print(string.format("loop %03d local: %02d | gmt %02d:%02d:%02d local %02d/%02d/%04d",loops,timezonetime,gmthours,gmtmins,gmtsecs,Nmonth,Nday,Nyear))

结果符合预期,但我无法控制 print() 始终添加的换行符。

我该如何使用 uart.write 和 string.format 控制输出,包括换行和其他控制字符的使用位置?

点赞
用户82287
用户82287

这个问题是由于在访问NodeMCU板时使用的LuaLoader中换行处理引起的。当与PUTTY一起使用时,输出如预期一样。

以下是更详细的测试结果。看起来,\r在传递给uart.write()的字符串参数中不起作用。

-- uart.write Test
print("______first test____________")   -- prime the output with a line and newline
uart.write(0,"asdfasdfasdfasdfasdf")   -- no newline
print("______should be at end of same line as asdf...______")
uart.write(0,"asdfasdfasdfasdfasdf(newline)\n")  -- with newline
print("______should be on line following asdf...____________")
uart.write(0,"asdfasdfasdfasdfasdf(CR)\r")  -- with return only
uart.write(0,"OVERWRITE\n")  -- overwrite the first part of asdf line, then newline
print("______should be on newline below OVERWRITE line ____________")

输出结果:

dofile("uwtest.lua")
______first test____________
asdfasdfasdfasdfasdf______should be at end of same line as asdf...______
asdfasdfasdfasdfasdf(newline)
______should be on line following asdf...____________
asdfasdfasdfasdfasdf(CR)
OVERWRITE
______should be on newline below OVERWRITE line ____________
>

预期结果是字符串"asdfasdfasdfasdfasdf(CR)\r"将后跟CR但不是LF,使终端光标向左移

这似乎是LuaLoader中终端仿真的问题。

当我使用Putty连接到NodeMCU时,我得到以下输出:

> dofile("uwtest.lua")
______first test____________
asdfasdfasdfasdfasdf______should be at end of same line as asdf...______
asdfasdfasdfasdfasdf(newline)
                             ______should be on line following asdf...____________
OVERWRITEsdfasdfasdf(CR)
         ______should be on newline below OVERWRITE line ____________
>

Putty输出如预期。

2018-08-18 14:32:27