Python 条形码扫描仪缓冲区未清除
操作系统是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()来读取输入。