キーボードを処理する 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:
