【问题标题】:Python barcode scanner buffer is not clearingPython条形码扫描仪缓冲区未清除
【发布时间】:2014-08-07 19:20:15
【问题描述】:

操作系统是 Windows 7 x64(运行 Python x86),但代码需要可导出到 Windows XP 和 Ubuntu Linux。

这部分问题可能是特定于 Windows 7 x64 的。

我正在使用与 HID 键盘兼容的 USB 条形码扫描仪。

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

第一次运行完美,退出,OK。

当我在同一个窗口中重新运行时,扫描仪数据似乎已缓冲,并且在进行新扫描时不再更改。

我尝试使用以下方法关闭代码:

.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 项目\键盘输入>keyboard.py [)>0617V33SR41P12973001S10515725 输出字符串:[)>0617V33SR41P12973001S10515725

D:\Python 项目\键盘输入>keyboard.py [)>0617V33SR41P12973001S10515725

如图所示,第二次运行停止。但是,第二次扫描以 23 而不是 25 结束!

如果我按 Enter 脚本完成。进一步的扫描是相同的。

【问题讨论】:

  • 尝试 sys.stdin.readline().strip() 而不是自己解析标准输入。我认为这应该会给你你正在寻找的结果。

标签: python windows keyboard stdin


【解决方案1】:

为了澄清我之前的评论,请从以下开始:

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() 进行编程以读取输入。

【讨论】:

  • 即使在 while 中添加 .flush() 也会给出:D:\Python Projects\Keyboard Input>keyboard.py [)>0617V33SR41P12973001S10515723 [)>0617V33SR41P12973001S10515723 [)>0617V33SR1051P157233一次扫描后。第三行尝试添加不同的扫描。并且,在没有进一步的输入被捕获之后。键盘上的 [Enter] 给出第四行。之后,额外的输入再次被阻止。如果我将焦点移到记事本上,我会得到正确的扫描数据。如果我回到命令行窗口,扫描数据不会改变。奇怪!
  • msvcrt.getch() 解决了一个问题并创建了另一个我不太确定如何描述的问题。但是,当从 Windows 到 Linux 并返回时,不想使用需要大量开关和差异的代码。带有超时的弹出窗口中的 pyQT lineedit 效果很好,但是,同样,该解决方案被弃用的权力。我认为他们最终会在结束之前投降。 :) 谢谢!顺便说一句,我们发送的三个数据矩阵扫描仪中的每一个都发送相同代码的略有不同的变体。因此,我尝试一一解析字符。
  • 查看我上面的更新,希望它可以帮助您解决便携性问题。
猜你喜欢
  • 1970-01-01
  • 2012-05-23
  • 2017-06-22
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多