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

Empty file by using serial.readline() in the main loop

我一直在尝试发送从串口接收到的数据。我正在使用 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

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

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

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

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