2011-08-24 2 views
1

현재 키보드 입력을 읽어야하는 임베디드 시스템에서 작업하고 있습니다 (실제로는 키보드 에뮬레이트 된 바코드 스캐너를 읽어야합니다).Linux 초기화 스크립트에서 STDIN 사용

하드웨어 부분에 데비안 스퀴즈 (Debian Squeeze)가있는 SheevaPlug를 사용하고 있습니다. 비즈니스 로직을 담당하는 Python 프로그램을 실행시키는 아주 기본적인 초기화 스크립트를 사용하고 있습니다.

키보드 입력을 읽어야하는 스크립트입니다.

우리는 스크린과 물건이있는 기본적으로 모든 기능을 갖춘 컴퓨터 인 개발 버전에서 작업 해 왔지만 꽤 괜찮 았지만 실제로는 받아 들일 수는 없지만 여기서 무엇이 잘못되었는지는 알지 못합니다. 내가 다소 기대했음을 인정한다).


그래서 나는 초기화가 시작될 때 어떻게 든 내 스크립트의 STDIN에 키보드를 연결 할 수있을 것입니다 방법을 알고 싶습니다.

누군가가 파이썬 라이브러리를 알고 있으면이 문제를 완전히 무시하고 input/eventX에서 직접 읽을 수 있습니다. 미리



감사

+2

을 init 스크립트? 시스템이 부팅되는 동안 바코드를 읽으려고합니까? 쉘 스크립트를 말하는 겁니까? –

+0

런레벨 2에서 스크립트를 시작합니다 (마지막으로 sshd와 stuff가 우선 순위를 갖습니다). 이 문제를 해결하는 적절한 방법이 아니라면 제안에 매우 흥미가있을 것입니다. –

+1

확인. 용어에 대해 궁금해하고 있었을뿐입니다. 이러한 "init"스크립트는 init에 의해 호출되는 쉘 스크립트입니다. init의 기본 stdin이 시스템 콘솔이기 때문에 키보드에서 읽는 것이 좋을 것입니다. 그러나 실제로 스캔을 수행하려면 바코드 스캐너를 트리거하는 방법이 필요합니다. init/rc 스크립트는 일반적으로 간단한 로그인으로 실행되지 않습니다. 일반적으로 부팅시 또는 실행 수준을 변경할 때. –

답변

1

이 시도 (단 자르/디바이스/입/위해서 event0 여러 USB의 HID-장치 repluging 대신 변경할 수있을)

import struct 

inputDevice = "/dev/input/event0" #keyboard on my system 
inputEventFormat = 'iihhi' 
inputEventSize = 16 

file = open(inputDevice, "rb") # standard binary file input 
event = file.read(inputEventSize) 
while event: 
    (time1, time2, type, code, value) = struct.unpack(inputEventFormat, event) 
    print type,code,value 
    event = file.read(inputEventSize) 
file.close() 


     def getUSBHIDs(self): 
    s=getExecOutput('cat /proc/bus/input/devices') 
    events=[] 
    for i in range(len(s)): 
     m=re.search('^.*Handlers=kbd.*event(?P<name>[0-9]+).*$',s[i]) 
     if m: 
      events+=['/dev/event'+m.group('name')] 
    return events 
+0

그리고 키보드/바코드 판독기가 연결된 eventx를 아는 편리한 방법을 알고 있습니까? –

+0

getUSBHIDs 살펴보기 –