python - 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)
解决方案
循环的全部意义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 秒以获取更多数据。如果没有更多数据,它将返回一个空字符串(不读取字节)并从循环中中断。
推荐阅读
- python - 根据第一个列键合并csv中的重复行
- firebase - Firebase Firestore 规则,允许未定义或最大长度为 600 个字符
- c# - 使用 c# 访问 Microsoft onedrive 文件和文件夹
- asp.net - 从 Oracle 更新 SQL Server 表
- android - 如何在 iOS/Android 中获取已存储的支付卡数据?
- hive - 为什么创建表和创建函数需要不同的权限
- mysql - 查询以选择直到某个日期的天数
- react-native - 如何动态更改视频组件的uri值
- android - 如果范围是用于游戏的 google api,则 React Native Google Signin 返回已取消
- dart - 在 Flutter / Dart 中减小视频文件大小