通过在主循环中使用serial.readline()清空文件

时间:2018-12-12 09:33:55

标签: python readline pyserial

我一直在尝试发送从串行端口接收到的数据。我正在使用serial.readline()从设备读取ASCII数据。在主循环中使用此功能时,可以打印字符串,但不能将其发送到输出文件。将f.write()放入循环时,我的readline()函数无法正常工作。知道如何解决这个问题吗?

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

1 个答案:

答案 0 :(得分:0)

当缓冲区已满时,文件将被刷新,而在退出with块时将被关闭。 如果您永远处于循环状态,则在缓冲区被填满之前不会看到文件更改。

您可以更改输出文件上的缓冲。参见How often does python flush to a file?

在您的示例中,您可以使用

with open('output.csv', 'a', buffering=0) as f: