<p><br/></p>
<h2>两种依赖操作系统处理键盘的输入方法</h2>
<pre><code>import sys
for line in sys.stdin.readlines():
print line
</code></pre>
<p>这是一个“简单”的解决方案,考虑到它读取sys.stdin,你可能需要一个驱动程序,如果操作系统一路剥离东西,它可能会打破任何方式。</p>
<p>这是另一个解决方案(仅限linux afaik):</p>
<pre><code>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)
</code></pre>
<h2>司机问题?</h2>
<p>如果以上都不起作用,您将无法在Python中获取密钥。<br/>
很可能您需要一个实际的驱动程序来解析从键盘发送的数据,这不是USB堆栈上的一个普通键盘事件,这意味着。。对于Python来说,这是一种低级的方式,而您将失去运气。。。除非你知道如何构建linux驱动程序。</p>
<p>无论如何,看看:<a href="http://ubuntuforums.org/showthread.php?t=1490385" rel="nofollow noreferrer">http://ubuntuforums.org/showthread.php?t=1490385</a></p>
<p>看来有更多的人想做点什么。</p>
<h2>正在尝试PyUSB</h2>
<p><a href="http://pyusb.sourceforge.net/docs/1.0/tutorial.html" rel="nofollow noreferrer">http://pyusb.sourceforge.net/docs/1.0/tutorial.html</a></p>
<p>您可以尝试PyUSB解决方案并从USB插槽中获取原始数据,但请再次。。如果G-keys没有注册为“传统”USB数据,它可能会被丢弃,而您将不会收到它。</p>
<h2>在Linux中连接到输入管道</h2>
<p>另一种未经测试的方法,但可能有效//Hackaday:
<img src="https://i.stack.imgur.com/n3Hbx.jpg" alt="enter image description here"/></p>