首页 > 解决方案 > Python串行读取所有输出(无法跳出while循环)

问题描述

我有这段代码,我用它来连接打印机并向它发送命令。它完美地工作,直到它进入while循环,它就是无法摆脱它。输出以串行方式打印预期的前几行,而不是等待直到 while 循环变为 false。我如何摆脱循环?

import serial
import os
import time

ser = serial.Serial('/dev/ttyUSB0', 115200)  # open serial port
print("Device Name: " + ser.name)
while True:
    response = ser.readline().decode('utf-8')
    print(response)

time.sleep(1)

标签: pythonpython-3.xserial-portpyserial

解决方案


循环的全部意义while True:在于没有停止条件。这意味着它将继续运行,直到您手动停止程序。

您可以做的是在您不再阅读任何内容时添加一个 break 语句。并且不要忘记在您的序列号上使用超时,这样它就不会永远挂起等待新数据:

import serial
import os
import time

ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=10)  # open serial port
print("Device Name: " + ser.name)
counter = 0
while counter < 10:
    response = ser.readline().decode('utf-8')
    print(response)
    if response == "":
        break

time.sleep(1)

有了这个,它将读取所有可用的内容,然后等待 10 秒以获取更多数据。如果没有更多数据,它将返回一个空字符串(不读取字节)并从循环中中断。


推荐阅读