【问题标题】:Detect keyboard input with support of Unicode in python在python中检测支持Unicode的键盘输入
【发布时间】:2017-09-18 04:38:52
【问题描述】:

我想检测 python 代码中的击键。我已经用不同的库尝试了很多方法,但它们都无法检测到 UTF 键盘输入,只能检测到 Ascii。例如,如果用户键入这些键,我想检测像 ("د") 或 ("ۼ") 这样的 Unicode 字符。这意味着如果我按下 Alt+Shift,它会将我的输入更改为使用 Unicode 字符的另一种语言,并且我想检测它们。

重要提示: 我需要 Windows 版本。

即使不关注终端,它也必须检测击键。

假设这个简单的例子:

from pynput import keyboard
def on_press(key):
    try:
        print(key.char)
    except AttributeError:
        print(key)

if __name__ == "__main__":
    with keyboard.Listener(on_press=on_press) as listener:
            listener.join()

【问题讨论】:

    标签: python unicode utf-8 keyboard-events


    【解决方案1】:

    pynput 的替代品,也可以通过 ssh 工作:sshkeyboard。使用pip install sshkeyboard 安装,

    然后编写脚本如:

    from sshkeyboard import listen_keyboard
    
    def press(key):
        print(f"'{key}' pressed")
    
    def release(key):
        print(f"'{key}' released")
    
    listen_keyboard(
        on_press=press,
        on_release=release,
    )
    

    它会打印出来:

    'a' pressed
    'a' released
    

    A 键被按下时。 ESC键默认结束监听。

    【讨论】:

      【解决方案2】:

      这是返回 Unicode 数量的代码。它无法检测到当前语言并始终显示旧语言,但仅在 cmd 窗口本身中显示,如果您将注意力集中在任何其他窗口上,它会完美显示当前的 Unicode 编号。

      from pynput import keyboard
      
      def on_press(key):
          if key == keyboard.Key.esc:
              listener.stop()
          else:
              print(ord(getattr(key, 'char', '0')))
      
      controller = keyboard.Controller()
      with keyboard.Listener(
              on_press=on_press) as listener:
          listener.join()
      

      【讨论】:

        【解决方案3】:

        很大程度上取决于操作系统和键盘输入方法,但这适用于我的 Ubuntu 系统;我测试了一些西班牙语字符。

        import sys
        import tty
        import termios
        
        def getch():
            fd = sys.stdin.fileno()
            old_settings = termios.tcgetattr(fd)
            try:
                tty.setraw(fd)
                ch = sys.stdin.read(1)
            finally:
                termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
            return ch
        
        x = getch()
        print("You typed: ", x, " which is Unicode ", ord(x))
        

        这是英语和西班牙语的相同击键:

        $ python3 unicode-keystroke.py
        You typed:  :  which is Unicode  58
        
        $ python3 unicode-keystroke.py
        You typed:  Ñ  which is Unicode  209
        

        getch 函数来自ActiveState

        【讨论】:

        • 谢谢,但我需要一个 Windows 代码。在 Windows 中 ttytermios 不起作用。
        猜你喜欢
        • 2014-04-18
        • 1970-01-01
        • 2012-09-10
        • 2017-11-23
        • 2013-07-22
        • 2011-06-09
        • 2017-10-07
        • 1970-01-01
        • 2015-02-16
        相关资源
        最近更新 更多