Использование STDIN в скрипте инициализации Linux - PullRequest
1 голос
/ 24 августа 2011

В настоящее время я работаю над встроенной системой, которая должна считывать ввод с клавиатуры (на самом деле - она ​​должна читать сканер штрих-кода с эмуляцией клавиатуры).

Я использую SheevaPlug с Debian Squeeze дляаппаратная часть, и я использую довольно простой сценарий инициализации, который запускает программу на python, отвечающую за выполнение бизнес-логики.

Это тот сценарий, который должен читать ввод с клавиатуры.

МыЯ работал над версиями разработки, которые были в основном полнофункциональными компьютерами, с экраном и прочим, и это работало довольно хорошо - но это не совсем приемлемо - но здесь я действительно не понимаю, что не так (хотя я признаю, что я ожидалЭто).

Так что я хотел бы знать, как можно было бы как-то подключить клавиатуру к STDIN моего скрипта, когда init запускает его.

В качестве альтернативы мне было бы интересно, если бы кто-то знал Pythonбиблиотека, которая позволила бы мне полностью обойти проблему и читать непосредственно из input / eventX.

Заранее спасибо

1 Ответ

1 голос
/ 07 ноября 2011

попробуйте это (но будьте осторожны / dev / input / event0 можно изменить вместо повторного подключения нескольких USB HID-устройств):

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
...