杰瑞科技汇

Linux下Python如何模拟键盘输入?

在 Linux 系统中,使用 Python 模拟键盘输入主要有以下几种方法,适用于不同的场景和需求:

Linux下Python如何模拟键盘输入?-图1
(图片来源网络,侵删)

方法 1:使用 pyautogui(跨平台,推荐)

pyautogui 是一个简单易用的跨平台 GUI 自动化库,支持模拟键盘和鼠标输入。

安装

pip install pyautogui

示例代码

import pyautogui
import time
# 模拟按下 'a' 键
pyautogui.press('a')
# 模拟按下组合键 Ctrl+C
pyautogui.hotkey('ctrl', 'c')
# 模拟输入一段文字
pyautogui.write('Hello, World!', interval=0.1)  # 每个字符间隔 0.1 秒
# 模拟按下 Enter 键
pyautogui.press('enter')
# 等待 2 秒
time.sleep(2)

注意事项

  • 权限问题:如果需要在无头服务器(如 Docker 容器或远程服务器)上运行,可能需要配置虚拟显示(如 Xvfb)。
  • 防冲突:默认情况下,pyautogui 有安全机制,移动鼠标到屏幕左上角会抛出 pyautogui.FailSafeException,可通过 pyautogui.FAILSAFE = False 禁用(不推荐)。

方法 2:使用 keyboard(仅限 Linux,需 root 权限)

keyboard 库直接与 Linux 内核的输入设备交互,需要 root 权限。

安装

pip install keyboard

示例代码

import keyboard
# 模拟按下 'a' 键
keyboard.press('a')
keyboard.release('a')
# 模拟输入一段文字
keyboard.write('Hello, Linux!', delay=0.1)
# 监听键盘事件(可选)
keyboard.wait('esc')  # 按下 Esc 键退出

注意事项

  • 权限要求:必须以 root 运行脚本(sudo python script.py)。
  • 依赖:可能需要安装 libudev 开发包(sudo apt-get install libudev-dev)。
  • 局限性:在虚拟环境中可能不工作。

方法 3:使用 xdotool(命令行工具 + Python 子进程)

xdotool 是 Linux 下的命令行工具,可通过 Python 的 subprocess 模块调用。

安装

sudo apt-get install xdotool  # Debian/Ubuntu
sudo yum install xdotool      # CentOS/RHEL

示例代码

import subprocess
# 模拟按下 'a' 键
subprocess.run(['xdotool', 'key', 'a'])
# 模拟输入文字
subprocess.run(['xdotool', 'type', 'Hello from xdotool'])
# 模拟组合键 Ctrl+Alt+Delete
subprocess.run(['xdotool', 'key', 'Ctrl+Alt+Delete'])

注意事项

  • 依赖 X11:需要在图形界面(X11)环境下运行。
  • 灵活性:适合简单的自动化任务,但不如 Python 库灵活。

方法 4:使用 uinput(内核模块,高级用法)

uinput 是 Linux 内核的虚拟输入设备模块,适合需要底层控制的场景(如模拟游戏手柄或自定义键盘)。

Linux下Python如何模拟键盘输入?-图2
(图片来源网络,侵删)

安装

sudo apt-get install python3-uinput  # 安装 Python 绑定
sudo modprobe uinput                # 加载内核模块

示例代码

from evdev import UInput, ecodes, KeyEvent
# 创建虚拟输入设备
ui = UInput()
# 模拟按下 'a' 键
ui.write(ecodes.EV_KEY, ecodes.KEY_A, KeyEvent.key_down)
ui.syn()  # 同步事件
# 模拟释放 'a' 键
ui.write(ecodes.EV_KEY, ecodes.KEY_A, KeyEvent.key_up)
ui.syn()
ui.close()

注意事项

  • 复杂度高:需要了解 Linux 输入子系统(evdev)。
  • 权限要求:必须以 root 运行。

总结与选择

方法 适用场景 权限要求 跨平台
pyautogui 跨平台 GUI 自动化(推荐) 无(X11 环境)
keyboard Linux 原生键盘输入 root
xdotool 命令行快速自动化 无(X11 环境)
uinput 底层虚拟输入设备(高级) root

推荐方案

  • 大多数场景:使用 pyautogui(简单、跨平台)。
  • 无头服务器:结合 Xvfb 虚拟显示运行 pyautogui
  • Linux 原生需求:使用 keyboard(需 root)或 xdotool(命令行)。

示例:结合 Xvfb 在无头服务器运行

# 安装 Xvfb
sudo apt-get install xvfb
# 运行脚本(后台虚拟显示)
xvfb-run -a python your_script.py

通过以上方法,你可以根据需求选择最适合的方案模拟键盘输入。

分享:
扫描分享到社交APP
上一篇
下一篇