在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入

前端之家收集整理的这篇文章主要介绍了在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个用Python编写的非常基本的parrot脚本,只是提示用户输入并将其打印回无限循环内. Raspberry Pi附带USB条形码扫描仪,用于输入.

while True:
    barcode = raw_input("Scan barcode: ")
    print "Barcode scanned: " + barcode

当您以“正常”速度扫描时,它可靠地工作,命令输出如下所示:

Scan barcode: 9780465031467
Barcode scanned: 9780465031467
Scan barcode: 9780007505142
Barcode scanned: 9780007505142

但是当你真的用很多扫描连续敲击它时,有可能让它错过输入,命令输出如下所示:

Scan barcode: 9780141049113
Barcode scanned: 9780141049113
Scan barcode: 9780465031467
Barcode scanned: 9780465031467
Scan barcode: 9780007505142
9780571273188
Barcode scanned: 9780571273188

请注意9780007505142是如何输入但从未打印过的.它在混乱中迷失了.

观看我的测试的视频演示:https://youtu.be/kdsfdKFhC1M

我的问题:这是不可避免的使用像Pi这样的低功耗设备?拥有条形码扫描仪的用户是否能够超越硬件的跟进能力?

最佳答案
您可能应该使用类似于以下的代码直接从stdin读取:

import os
import sys
import select

stdin_fd = sys.stdin.fileno()
try:
    while True:
        sys.stdout.write("Scan barcode: ")
        sys.stdout.flush()
        r_list = [stdin_fd]
        w_list = list()
        x_list = list()
        r_list,w_list,x_list = select.select(r_list,x_list)
        if stdin_fd in r_list:
            result = os.read(stdin_fd,1024)
            result = result.rstrip()
            result = [line.rstrip() for line in result.split('\n')]
            for line in result:
                print "Barcode scanned: %s" % line
except KeyboardInterrupt:
    print "Keyboard interrupt"

代码应处理一次读取多行的情况.读取缓冲区大小是任意的,您可能需要根据需要处理的数据来更改它.

原文链接:https://www.f2er.com/python/438636.html

猜你在找的Python相关文章