Python 条形码扫描仪缓冲区未清除

1 投票
1 回答
860 浏览
提问于 2025-04-18 10:06

操作系统是Windows 7 x64(运行的是32位的Python),但代码需要能够在Windows XP和Ubuntu Linux上使用。

这个问题可能是Windows 7 x64特有的。

我在使用一个USB条形码扫描器,它兼容HID键盘。

我在包含keyboard.py文件的文件夹中打开命令提示符并执行它。

第一次运行时一切正常,程序退出也没问题。

但是当我在同一个窗口重新运行时,扫描器的数据似乎被缓存了,新的扫描数据不再更新。

我尝试通过以下方式关闭代码:

.flush() .readline() and .read() all to no avail. Is this a flaw in Win7 or am I missing something.

代码:

import sys

x = ''
oStr = ''
#while x != 'exit':
while True:
    x = sys.stdin.read(1)
    if (x.find('\n') != -1) or (x.find('\04') != -1):
        break

    oStr = oStr + x


print 'Output String: ' + oStr #+ '\n'


Output:

D:\Python Projects\Keyboard Input>keyboard.py [)>0617V33SR41P12973001S10515725 输出字符串: [)>0617V33SR41P12973001S10515725

D:\Python Projects\Keyboard Input>keyboard.py [)>0617V33SR41P12973001S10515725

第二次运行时程序卡住了,如上所示。但是,第二次扫描的结果是23而不是25!

如果我按下Enter键,脚本会完成。之后的扫描结果也是一样的。

1 个回答

0

为了更清楚地说明我之前的评论,先从这个开始:

while 1:
  print sys.stdin.readline.strip()

这样每次按下触发按钮时就会生成一个条形码。如果这个能正常工作,但程序按顺序运行时失败,那你需要检查一下你的条形码扫描器是怎么设置的(这可能是Windows的设置问题,而不是Python的问题)。


更新:Windows控制台显示了一些奇怪的情况,你可以通过使用msvcrt.getch()来解决这个问题,不过这不是一个跨平台的解决方案。要让这个解决方案可以在不同系统上使用,可以考虑像下面这样:

try:
  from msvcrt import getch
except:
  import sys
  getch = lambda: sys.stdin.read(1)

然后你可以用getch()来读取输入。

撰写回答