5

Pythonでキーボードの生の入力を取得しようとしています。プログラム可能なキーを備えた Logitech ゲーミング キーボードを持っていますが、Logitech は Linux 用のドライバーを提供していません。だから私はこれのために私自身のドライバーを書くことができると思った. 解決策は次のようになると思います:

with open('/dev/keyboard', 'rb') as keyboard:
    while True:
        inp = keyboard.read()
        -do something-

英語は私の母国語ではありません。誤りを見つけた場合は、修正してください。

4

2 に答える 2

2


キーボードを処理する OS に依存する 2 つの入力方法

import sys
for line in sys.stdin.readlines():
    print line

これは、sys.stdin を読み取ることを考えると、問題に対する「単純な」解決策の 1 つであり、おそらくドライバーが必要であり、OS が途中で何かを取り除くと、とにかく壊れる可能性があります。

これは別の解決策です(Linuxのみのafaik):

import sys, select, tty, termios
class NonBlockingConsole(object):
    def __enter__(self):
        self.old_settings = termios.tcgetattr(sys.stdin)
        tty.setcbreak(sys.stdin.fileno())
        return self

    def __exit__(self, type, value, traceback):
        termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.old_settings)

    def get_data(self):
        try:
            if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
                return sys.stdin.read(1)
        except:
            return '[CTRL-C]'
        return False

data = ''
printed = ''
last = ''
with NonBlockingConsole() as nbc:
    while 1:
        c = nbc.get_data()
        if c:
            if c == '\x1b': # x1b is ESC
                break
            elif c == '\x7f': # backspace
                data = data[:-1]
                printed = data[:-1]
                last = ''
                sys.stdout.write('\b')
            elif c == '[CTRL-C]':
                data = ''
                last = ''
                sys.stdout.write('\n')
            elif c == '\n': # it's RETURN
                sys.stdout.write('\n')
                # parse data here
                data = ''
            else:
                data += (c)
                last = c
                sys.stdout.write(c)

ドライバーの問題?

上記のいずれも機能しない場合、Python 内でキーを取得できません。
ほとんどの場合、USB スタック上の通常のキーボード イベントではない、キーボードから送信されたデータを解析できる実際のドライバーが必要になるでしょう。 .. Linux ドライバーのビルド方法を知らない限り。

とにかく、見てください:http://ubuntuforums.org/showthread.php?t=1490385

より多くの人々がそれについて何かをしようとしているようです。

PyUSB を試す

http://pyusb.sourceforge.net/docs/1.0/tutorial.html

PyUSB ソリューションを試して、USB ソケットから生データをフェッチすることもできますが、G キーが「従来の」USB データとして登録されていない場合、ドロップされて受信されない可能性があります。

Linux での入力パイプへのフック

テストされていない別の方法ですが、動作する可能性があります //Hackaday: ここに画像の説明を入力

于 2013-05-14T15:53:39.553 に答える
0

Logitech は Linux 用のドライバーを提供していません。だから私はこれのために私自身のドライバーを書くことができると思った.

Linux ドライバーは C で書かれています。これは非常に低レベルのコードであり、カーネル空間で実行されます。

于 2013-05-14T16:03:38.690 に答える