我有一个用Python编写的非常基本的parrot脚本,只是提示用户输入并将其打印回无限循环内. Raspberry Pi附带USB条形码扫描仪,用于输入.
while True: barcode = raw_input("Scan barcode: ") print "Barcode scanned: " + barcode
@H_403_8@当您以“正常”速度扫描时,它可靠地工作,命令输出如下所示:
Scan barcode: 9780465031467 Barcode scanned: 9780465031467 Scan barcode: 9780007505142 Barcode scanned: 9780007505142
@H_403_8@但是当你真的用很多扫描连续敲击它时,有可能让它错过输入,命令输出如下所示:
Scan barcode: 9780141049113 Barcode scanned: 9780141049113 Scan barcode: 9780465031467 Barcode scanned: 9780465031467 Scan barcode: 9780007505142 9780571273188 Barcode scanned: 9780571273188
@H_403_8@请注意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"
@H_403_8@此代码应处理一次读取多行的情况.读取缓冲区大小是任意的,您可能需要根据需要处理的数据来更改它.