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

时间:2014-06-17 17:05:28

标签: python windows keyboard stdin

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

问题的这一部分可能是Windows 7 x64特有的。

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

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

第一次完美运行并退出,好的。

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

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

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

CODE:

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   [)GT; 0617V33SR41P12973001S10515725   输出字符串:[]> 0617V33SR41P12973001S10515725

     

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

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

如果我按 Enter ,脚本就会完成。进一步的扫描是一样的。

1 个答案:

答案 0 :(得分: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()编程来读取输入。