使用Python获取键盘的输入

  • 本文描述在 Ubuntu 20 上使用 python 获取键盘输入

1. 准备

  • 安装 evdev
  • 确认目标键盘的输入具体的设备号
    1. 使用 lsusb 查看键盘usb设备总线号和设备号
    2. 使用 cat /proc/bus/input/devices 和上面对应 ID
    3. 使用 cat /dev/input/event4 | hexdump 去测试可疑的输入设备

2. 使用如下 python 程序即可

  • 本程序会将读到的键盘输入封装成 8Bytes 的 HID 键盘数据包,并添加到队列

import evdev
from evdev import InputDevice
from select import select
import rectrlkeymap = {#define USB_HID_MODIFIER_LEFT_CTRL   0x01
#define USB_HID_MODIFIER_LEFT_SHIFT  0x02
#define USB_HID_MODIFIER_LEFT_ALT    0x04
#define USB_HID_MODIFIER_LEFT_GUI    0x08 // (Win/Apple/Meta)
#define USB_HID_MODIFIER_RIGHT_CTRL  0x10
#define USB_HID_MODIFIER_RIGHT_SHIFT 0x20
#define USB_HID_MODIFIER_RIGHT_ALT   0x40
#define USB_HID_MODIFIER_RIGHT_GUI   0x80
#define USB_HID_KEY_L     0x0F"KEY_LEFTSHIFT"     :     0x2,
"KEY_RIGHTSHIFT"    :     0x20,
"KEY_LEFTCTRL"      :     0x01,
"KEY_RIGHTCTRL"     :     0x10,
"KEY_LEFTALT"       :     0x4,
"KEY_RIGHTALT"      :     0x40,
"KEY_LEFTMETA"      :     0x8,
"KEY_RIGHTMETA"     :     0x80,
}normalkeymap = {"KEY_A"  :            0x04,
"KEY_B"  :            0x05,
"KEY_C"  :            0x06,
"KEY_D"  :            0x07,
"KEY_E"  :            0x08,
"KEY_F"  :            0x09,
"KEY_G"  :            0x0A,
"KEY_H"  :            0x0B,
"KEY_I"  :            0x0C,
"KEY_J"  :            0x0D,
"KEY_K"  :            0x0E,
"KEY_L"  :            0x0F,
"KEY_M"  :            0x10,
"KEY_N"  :            0x11,
"KEY_O"  :            0x12,
"KEY_P"  :            0x13,
"KEY_Q"  :            0x14,
"KEY_R"  :            0x15,
"KEY_S"  :            0x16,
"KEY_T"  :            0x17,
"KEY_U"  :            0x18,
"KEY_V"  :            0x19,
"KEY_W"  :            0x1A,
"KEY_X"  :            0x1B,
"KEY_Y"  :            0x1C,
"KEY_Z"  :            0x1D,
"KEY_0"  :            0x27,
"KEY_1"  :            0x1E,
"KEY_2"  :            0x1F,
"KEY_3"  :            0x20,
"KEY_4"  :            0x21,
"KEY_5"  :            0x22,
"KEY_6"  :            0x23,
"KEY_7"  :            0x24,
"KEY_8"  :            0x25,
"KEY_9"  :            0x26,
"KEY_KP0" :                0x62,
"KEY_KP1" :                0x59,
"KEY_KP2" :                0x5A,
"KEY_KP3" :                0x5B,
"KEY_KP4" :                0x5C,
"KEY_KP5" :                0x5D,
"KEY_KP6" :                0x5E,
"KEY_KP7" :                0x5F,
"KEY_KP8" :                0x60,
"KEY_KP9" :                0x61,"KEY_KPASTERISK" :         0x55,
"KEY_KPPLUS"     :         0x56,
"KEY_KPENTER"   :          0x58,
"KEY_KPMINUS"   :          0x57,
"KEY_KPDOT"     :          0x63,
"KEY_KPSLASH"   :          0x54,
"KEY_F1" :             0x3A ,
"KEY_F2" :             0x3B ,
"KEY_F3" :             0x3C ,
"KEY_F4" :             0x3D ,
"KEY_F5" :             0x3E ,
"KEY_F6" :             0x3F ,
"KEY_F7" :             0x40 ,
"KEY_F8" :             0x41 ,
"KEY_F9" :             0x42 ,
"KEY_F10":              0x43,
"KEY_F11":              0x44,
"KEY_F12":              0x45,"KEY_BACKSPACE"     :      0x2A,
"KEY_TAB"           :      0x2B,
"KEY_ENTER"         :      0x28,
"KEY_CAPSLOCK"      :      0x39,
"KEY_ESC"           :      0x29,
"KEY_SPACE"         :      0x2C,
"KEY_PAGEUP"        :      0x4B,
"KEY_PAGEDOWN"      :      0x4E,
"KEY_END"           :      0x4D,
"KEY_HOME"          :      0x4A,
"KEY_LEFT"          :      0x50,
"KEY_UP"            :      0x52,
"KEY_RIGHT"         :      0x4F,
"KEY_DOWN"          :      0x51,
"KEY_INSERT"        :      0x49,
"KEY_DELETE"        :      0x4C,
"KEY_NUMLOCK"       :      0x53,
"KEY_GRAVE"         :      0x35,
"KEY_BACKSLASH"     :      0x31,
"KEY_LEFTBRACE"     :      0x2F,
"KEY_RIGHTBRACE"    :      0x30,
"KEY_SLASH"         :      0x38,
"KEY_COMMA"         :      0x36,
"KEY_DOT"           :      0x37,
"KEY_SEMICOLON"     :      0x33,
"KEY_APOSTROPHE"    :      0x34,
"KEY_MINUS"         :      0x2D,
"KEY_EQUAL"         :      0x2E,
"KEY_SYSRQ"         :      0x46,
"KEY_SCROLLLOCK"    :      0x47,
"KEY_PAUSE"         :      0x48,
}def ispress (str):if str :if str.find('down') != -1:return  Trueif str.find('hold') != -1:return  Trueif str.find('up') != -1:return  Falsedef detectInputKey(devpath, msgq):dev = InputDevice(devpath)keylist = [0] * 9print(keylist)while True:for event in dev.read_loop():if event.type == evdev.ecodes.EV_KEY:msg = str(evdev.categorize(event))sendstr = re.findall(r"(\([^\)]*\))", msg)if len(sendstr):matchkey = sendstr[0][1:-1]print("matchkey:", matchkey)ctrkeyval = ctrlkeymap.get(matchkey)print("ctr key val:", ctrkeyval)keval = normalkeymap.get(matchkey)print("key val:", keval)if ctrkeyval : #ctrl keyif ispress(msg) :keylist[0] = keylist[0] | ctrkeyvalelse :keylist[0] = keylist[0] & (~ctrkeyval)elif keval : # normal keyif ispress(msg) :for i in range(2, 8):if keylist[i] == 0 or keylist[i] == keval:keylist[i] = kevalbreakelse :for i in range(2, 8):if keylist[i] == keval:keylist[i] = 0breakkeylist[8] = 0xffbyt = bytes(keylist)print(keylist, byt)if msgq :msgq.put(byt)if __name__ == "__main__":detectInputKey('/dev/input/event4', 0)

使用Python获取键盘的输入相关推荐

  1. python 获取键盘输入、同时有超时的功能_python 获取键盘输入,同时有超时的功能示例...

    如下所示: ''' ###get keyboard input and timeout =5 import sys, time, msvcrt def readInput( caption, defa ...

  2. c# 获取键盘的输入

    Console 类公开了三个方法获取键盘的输入,分别是Read .Readkey.ReadLine Read方法: 每次只能读入一个字符,如果没有字符可以读,返回-1,Read方法是不会马上读取的,读 ...

  3. python获取键盘输入函数input

    用input函数可以获取键盘的输入,这样可以动态的改变一个变量的值. 比如: a = input("Enter a number\n") 运行结果如下:

  4. python获取键盘输入能不能不按回车键_Github获8300星!用Python开发的一个命令行的网易云音乐...

    最近在逛Github发现了一个非常有趣的库musicbox,是用纯Python打造的,收获了8300颗星.Python语言简单易学,好玩有趣,身边越来越多的小伙伴都开始学习Python.她的魅力非常大 ...

  5. python获取键盘输入_python之判断数据异常Python读取键盘输入

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: <python之判断数据异常Python读取键盘输入>总结了关于python网站教程,对于我们来www. ...

  6. python从键盘上输入10个整数、输出奇数和_数据库 从键盘上输入10个整数型的数值,分别统计奇数和偶数的个数...

    从键盘上输入10个整数,并求出这10个数中所有奇数的和与所有偶数之和要求:分别用while,do ...while #includelongmain(void){\x05longa[10]={0};\ ...

  7. Python从键盘中输入一个列表

    从键盘上输入一个列表,在键盘上输入形式:[1,2,3,5,6] 直接上代码 x = input() x = x.strip('[') x = x.strip(']') xlist = x.split( ...

  8. python获取键盘输入_Python 3 学习笔记之——键盘输入和读写文件

    1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘.input 可以接收一个 Python 表达式作为输入,并将运算结果返回. str = inp ...

  9. python中通过什么函数来获取键盘的输入_Python中使用 input 函数来获取输入

    所谓输入,就是用代码获取用户通过键盘输入的信息. 例如:去银行取钱,在 ATM 上输入密码. 在 Python 中,如果要获取用户在键盘上的输入信息,需要使用到input()函数. 函数input() ...

  10. python获取键盘输入_python如何获取键盘输入

    python2中:raw_input函数 raw_input() 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):str = raw_input("Enter your in ...

最新文章

  1. 【Qt】Qt再学习(十五):关于paintEvent、QPainter学习这一个demo就够了
  2. sqlserver清除日志
  3. java model.put_深入理解Java内存模型(一)——基础
  4. GL ERROR - after deleteUnusedTextures() glError (0x502)
  5. 高并发下秒杀商品,必须知道的9个细节
  6. php返回200,关于API 使用 HTTP 状态码还是全部返回 200
  7. 一行Python代码能干什么?惊了!
  8. DisplayLink 安装错误
  9. 《深入理解JAVA虚拟机》周志明 第三版 - 第三章 垃圾收集器与内存分配策略
  10. 恒凯USB数据采集卡在国产麒麟操作系统下的应用(四)QT环境设置及数据采集实验
  11. AppStore上线审核
  12. 对云计算机的想法,我对云计算技术的看法
  13. H5生成二维码及保存
  14. pdf怎么分割成多个文件?有两种方式
  15. Java修改JTable单元格背景色
  16. rtsp流媒体服务器的搭建
  17. 【它山之玉】Trump:让人们发出噢、啊的惊叹声!—科学网马臻
  18. 如何让图像过渡更自然 python_如何使用Python和OpenCV融合、拼接照片?
  19. windows linux 使用usb | WiFi连接手机摄像头
  20. win7 计算器的用法

热门文章

  1. 【oracle】varchar和varchar2区别
  2. 自给自足实现web网络文字游戏【追梦西游】(一)
  3. 普林斯顿微积分读本02第一章--函数的复合、奇偶函数、函数图像
  4. matlab freqz-m,Matlab函数freqs和freqz
  5. 非线性控制1.0——模糊控制理论基础
  6. 如何查看wifi信息并对其进行管理?这些app帮你一键掌控你的wifi信息
  7. mysql 修改表结构命令是_mysql修改表结构命令大全
  8. spss数据分析软件
  9. iOS 乱码问题之一
  10. Java8新特性之Lambda表达式