python调用扫描仪pyinsane_Python evdev和条形码扫描仪

I have a following code which I use to catch input from bar code scanner. The problem is in that I want to save whole scanned code in database, but every character of code prints on new line:

#!/usr/bin/env python

from evdev import InputDevice, ecodes, list_devices

from select import select

keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"

dev = InputDevice("/dev/input/event10")

barcode = ""

while True:

r,w,x = select([dev], [], [])

for event in dev.read():

if event.type == 1 and event.value == 1:

barcode += (keys[event.code])

print barcode

# sudo ./bar-code-test.py

#0

#00

#00

#000

#001

#1001

#0017

#70017

#00170

#000170

#001708

#8001708

#0017085

#50017085

#00170853

#300170853

#001708531

#1001708531

#0017085316

#60017085316

#00170853160

#000170853160

#001708531601

#1001708531601

#0017085316013

#30017085316013

#00170853160131

#100170853160131

#00170853160131X

#00170853160131X

I Am newbie with python, so any help will be appreciated.

解决方案

Found a solution. Bar code scanner after each scanned code send 42 scan code (Enter key), so we need check scan code:

#!/usr/bin/env python

from evdev import InputDevice, ecodes, list_devices, categorize

import signal, sys

scancodes = {

# Scancode: ASCIICode

0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8',

10: u'9', 11: u'0', 12: u'-', 13: u'=', 14: u'BKSP', 15: u'TAB', 16: u'Q', 17: u'W', 18: u'E', 19: u'R',

20: u'T', 21: u'Y', 22: u'U', 23: u'I', 24: u'O', 25: u'P', 26: u'[', 27: u']', 28: u'CRLF', 29: u'LCTRL',

30: u'A', 31: u'S', 32: u'D', 33: u'F', 34: u'G', 35: u'H', 36: u'J', 37: u'K', 38: u'L', 39: u';',

40: u'"', 41: u'`', 42: u'LSHFT', 43: u'\\', 44: u'Z', 45: u'X', 46: u'C', 47: u'V', 48: u'B', 49: u'N',

50: u'M', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 100: u'RALT'

}

barCodeDeviceString = "Metrologic Metrologic Scanner"

devices = map(InputDevice, list_devices())

for device in devices:

if device.name == barCodeDeviceString:

dev = InputDevice(device.fn)

def signal_handler(signal, frame):

print 'Stopping'

dev.ungrab()

sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

dev.grab()

barcode = ""

for event in dev.read_loop():

if event.type == ecodes.EV_KEY:

data = categorize(event)

if data.keystate == 1 and data.scancode != 42: # Catch only keydown, and not Enter

if data.scancode == 28:

print barcode

barcode = ""

else:

barcode += keys[data.scancode]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值