在主循环中使用 serial.readline() 清空文件
Posted
技术标签:
【中文标题】在主循环中使用 serial.readline() 清空文件【英文标题】:Empty file by using serial.readline() in the main loop 【发布时间】:2018-12-12 09:33:54 【问题描述】:我一直在尝试发送从串行端口接收的数据。我正在使用serial.readline()
从我的设备中读取 ASCII 数据。当我在主循环中使用这个函数时,我可以打印字符串但我不能将它发送到我的输出文件。当我将readline()
放在循环中时,我的f.write()
函数不起作用。知道如何解决这个问题吗?
import serial
import csv
ser=serial.Serial('COM6', 9600, 8, parity='N', timeout=2)
with open('output.csv','a') as f:
while True:
line = ser.readline()
if line:
print(line)
f.write(line)
这是我得到的数据,但输出文件中没有。
0R5,Th=24.3C,Vs=24.2V
0R2,Ta=23.3C,Ua=21.3P,Pa=1026.9H
0R1,Dm=000#,Sm=99.9#
0R5,Th=24.3C,Vs=24.2V
【问题讨论】:
请修复缩进 - 我想整个while loop
需要缩进一级。即,如果您的代码看起来像这样,您将得到 IndentationError
是的,我把代码放在这里时出错了。谢谢。
【参考方案1】:
当你退出with
块时,如果缓冲区已满,文件将被刷新并关闭。
如果您永远处于循环中,则在填充缓冲区之前不会看到文件的任何更改。
您可以更改输出文件的缓冲。见How often does python flush to a file?
在您的示例中,您可以使用
with open('output.csv', 'a', buffering=0) as f:
【讨论】:
太棒了!它解决了我的问题。我能够将数据发送到我的输出文件。谢谢!以上是关于在主循环中使用 serial.readline() 清空文件的主要内容,如果未能解决你的问题,请参考以下文章
Py serial readline在Python3中不起作用