【问题标题】:Simulating Key Press event using Python for Linux使用 Python for Linux 模拟按键事件
【发布时间】:2011-02-04 06:06:41
【问题描述】:

我正在编写一个脚本来自动运行特定模型。当模型失败时,它会等待用户输入(Enter 键)。我可以检测到模型何时失败,但我无法使用 python(在 linux 上)来模拟按键事件。 Windows 有 SendKeys 库可以做到这一点,但我想知道在 linux 上是否有类似的 python 库。

谢谢!

【问题讨论】:

    标签: python linux key keypress simulate


    【解决方案1】:

    看看这个https://github.com/SavinaRoja/PyUserInput 在python中对鼠标和键盘的跨平台控制

    键盘控制适用于 X11(linux) 和 Windows 系统。但是没有mac支持(当我写这个答案时)。

    from pykeyboard import PyKeyboard
    k = PyKeyboard()
    
    # To Create an Alt+Tab combo
    k.press_key(k.alt_key)
    k.tap_key(k.tab_key)
    k.release_key(k.alt_key)
    

    【讨论】:

    【解决方案2】:

    更底层的方法是创建一个uinput 设备,然后您可以从该设备将输入事件注入到 linux 输入子系统中。考虑以下库:

    使用后者发送<enter> 的示例:

    from evdev import uinput, ecodes as e
    
    with uinput.UInput() as ui:
         ui.write(e.EV_KEY, e.KEY_ENTER, 1)
         ui.write(e.EV_KEY, e.KEY_ENTER, 0)
         ui.syn()
    

    【讨论】:

      【解决方案3】:

      如果“模型”以图形方式运行(使用 X 窗口系统),则可以使用已建议的 xsendkeyxsendkeycode。如果它以文本方式运行(在终端窗口中),则为pexpect

      【讨论】:

      • 嗨!推论:使用 pexpect 时,以下简单程序似乎对我不起作用: import pexpect child = pexpect.spawn('ls') fout = file('output.txt', 'w') child.logfile = fout 即, output.txt 已创建,但当我 cat 它时为空。 pexpect 安装得很好,因为我可以运行程序附带的示例。任何建议,将不胜感激!谢谢!
      • xsendkeyxsendkeycode 的链接已失效。
      • @hazzey 这是一个非常棒的分支:github.com/kyoto/sendkeys xsendkey 程序非常棒,可以在不允许简单的复制粘贴以及必须编写标签后使用验证时绕过限制输入/返回键,就像在 Tumblr 上一样(JavaScript hack 会更复杂)
      【解决方案4】:

      我推荐PyAutoGui。它使用起来非常简单,它是跨平台的,并且适用于 Python 3 和 2。

      在链接页面中列出了依赖关系和一些代码示例。

      【讨论】:

        【解决方案5】:

        【讨论】:

        • 你显然可以看一下xsendkey这个相当简单的代码,然后在python的Xlib绑定中搜索对应的调用。
        【解决方案6】:

        由于我在这个和另一个well ranked SO response 中找到的许多解决方案要么被弃用(PyUserInput),要么使用evdev,但失败了(UInputError: "/dev/uinput" cannot be opened for writing)对我来说使用Linux 最简单的解决方案是@987654324 @。直接来自他们的文档的一个示例:

        from pynput.keyboard import Key, Controller
        
        keyboard = Controller()
        
        # Press and release space
        keyboard.press(Key.space)
        keyboard.release(Key.space)
        
        # Type a lower case A; this will work even if no key on the
        # physical keyboard is labelled 'A'
        keyboard.press('a')
        keyboard.release('a')
        
        # Type two upper case As
        keyboard.press('A')
        keyboard.release('A')
        with keyboard.pressed(Key.shift):
            keyboard.press('a')
            keyboard.release('a')
        
        # Type 'Hello World' using the shortcut type method
        keyboard.type('Hello World')
        

        它就像一个魅力!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多