Модуль pynput в Python, управление клавиатурой и мышью
Перехват и имитация событий клавиатуры и мыши из Python
Модуль pynput позволяет перехватывать и имитировать события устройств ввода, а именно клавиатуры и мыши. Модуль включает в себя подмодули для каждого типа поддерживаемого устройства ввода:
- pynput.keyboard — содержит классы для управления и мониторинга клавиатуры.
- pynput.mouse — содержит классы для управления и мониторинга мыши или trackpad .
Все упомянутые выше модули автоматически импортируются в пакет pynput . Чтобы использовать их, необходимо импортировать каждый из основного пакета:
from pynput import mouse, keyboard
Установка модуля pynput в виртуальное окружение.
Модуль pynput размещен на PyPI, поэтому установка относительно проста.
# создаем виртуальное окружение, если нет $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # ставим модуль pynput (VirtualEnv):~$ python3 -m pip install -U pynput
Модуль pynput будет пытаться использовать определенный внутренний интерфейс, подходящий для текущей платформы, но этот автоматический выбор можно переопределить.
Если заданы переменные окружения $PYNPUT_BACKEND_KEYBOARD или $PYNPUT_BACKEND , то их значение будет использоваться в качестве имени сервера для классов клавиатуры, а если заданы $PYNPUT_BACKEND_MOUSE или $PYNPUT_BACKEND , то их значение будет использоваться в качестве имени сервера для классов мыши.
Доступные серверные части являются:
- darwin — значение по умолчанию для macOS.
- win32 — значение по умолчанию для Windows.
- xorg — значение по умолчанию для других операционных систем.
- uinput — дополнительный серверный интерфейс для Linux, требующий привилегий root и поддерживающий только клавиатуры.
- dummy — нефункциональный, но импортируемый серверный интерфейс. Он полезен в качестве серверной части мыши при использовании серверной части uinput .
Ограничения платформ.
Модуль pynput направлен на предоставление единого API для всех поддерживаемых платформ, но в некоторых случаях это не совсем возможно.
Ограничения платформы Linux.
В Linux, модуль pynput использует X -сервер или библиотеку uinput (требует root привилегий). При работе под X -сервером должно выполняться следующее:
- X-сервер должен быть запущен.
- Должна быть установлена переменная окружения $DISPLAY .
- При работе под uinput должно быть верно следующее: Необходимо запускать программу Python с root правами, чтобы она имела необходимые разрешения для работы с uinput . Первое требование для X -сервера означает, что запуск pynput через SSH обычно не работает. Чтобы обойти это, обязательно установите переменную окружения $DISPLAY :
$ DISPLAY=:0 python -c 'import pynput'
При работе под Wayland эмулятор X-сервера Xwayland обычно работает, предоставляя ограниченную функциональность. При этом, модуль pynput будет получать входные события только от приложений, работающих под управлением этого эмулятора.
Ограничения платформы macOS.
Последние версии macOS ограничивают мониторинг клавиатуры из соображений безопасности. По этой причине одно из следующего должно быть истинным:
- Процесс должен запускаться от имени root .
- Приложение должно быть внесено в белый список в разделе «Разрешить доступ для вспомогательных устройств«. Обратите внимание, что для этого может потребоваться упаковка приложения, т.к. в противном случае, вся установка Python должна быть включена в белый список.
- В версиях после Mojave , если скрипт запускается из терминала, то может потребоваться добавить в белый список также приложение терминала.
Обратите внимание, что это требование не относится к мониторингу мыши или trackpad .
Если нет недостающих разрешений, то все классы слушателей Listener имеют дополнительный атрибут IS_TRUSTED , который имеет значение True .
Ограничения платформы Windows.
В Windows, виртуальные события, отправленные другими процессами, могут не приниматься. Чтобы отправлять любые сгенерированные виртуальные события всем запущенным слушателям текущего процесса, модуль pynput принимает меры предосторожности.
Кроме того, отправка событий нажатия клавиш будет правильно распространяться на остальную часть системы, но сама операционная система не будет считать, что кнопки действительно нажаты. Это означает, что события нажатия клавиши, созданные модулем, не будут генерироваться постоянно, как при физическом удерживании клавиши, а определенные последовательности клавиш, такие как нажатие Shift при нажатии клавиш со стрелками, не будут работать должным образом.
Пример использования модуля pynput .
Мониторинг клавиатуры.
Подмодуль pynput.keyboard содержит классы для управления и мониторинга клавиатуры.
from pynput import keyboard # В этом блоке будет работать слушатель событий. with keyboard.Events() as events: for event in events: if event.key == keyboard.Key.esc: break else: print(f'Получено событие клавиатуры event>')
Управление мышью.
Подмодуль pynput.mouse содержит классы для управления и мониторинга мыши.
from pynput.mouse import Button, Controller mouse = Controller() # Считывание положения указателя print(f'Текущее положение указателя: mouse.position>') # Установка положения указателя mouse.position = (10, 20) print(f'Указатель перемещен в позицию: mouse.position>') # Перемещение указателя относительно текущего положения mouse.move(5, -5) # Нажатие и отпускание левой кнопки мыши mouse.press(Button.left) mouse.release(Button.left) # Двойной клик - отличается от простого нажатия mouse.click(Button.left, 2) # Прокрутка страницы на два шага вниз mouse.scroll(0, 2)
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Мониторинг и управление клавиатурой
- Мониторинг за состоянием и управление мышью
- Класс keyboard.Controller() модуля pynput
- Класс keyboard.Listener() модуля pynput
- Класс keyboard.Key модуля pynput
- Класс keyboard.KeyCode() модуля pynput
- Класс mouse.Controller() модуля pynput
- Класс mouse.Listener() модуля pynput
Модуль keyboard в питон, где же он?
Установил модуль keyboard, прописал в скрипте import keyboard. Иии.. Его нет:
diver ~/Скрипты % python l22.py [1] 0:08:11 Traceback (most recent call last): File "/home/diver/Скрипты/l22.py", line 7, in import keyboard ModuleNotFoundError: No module named 'keyboard'

LightDiver ★★★★★
03.08.23 20:14:46 MSK
- Ответить на это сообщение
- Ссылка
← 1 2 →
в таргетах keyboard есть версия питона, которая запускает твой скрипт?
mittorn ★★★★★
( 03.08.23 20:36:21 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
И у тебя вообще venv, у его свои модули
mittorn ★★★★★
( 03.08.23 20:36:55 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от mittorn 03.08.23 20:36:21 MSK

Как это проверить?
LightDiver ★★★★★
( 03.08.23 20:37:42 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от mittorn 03.08.23 20:36:55 MSK

В генте установка модулей только так делается.
LightDiver ★★★★★
( 03.08.23 20:38:01 MSK ) автор топика
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от LightDiver 03.08.23 20:37:42 MSK
У тебя модуль поставлен в venv. Потом ты запускаешь свой скрипт без venv. С чего спрашивается у тебя этот модуль должен загрузиться?
mittorn ★★★★★
( 03.08.23 20:38:44 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от LightDiver 03.08.23 20:38:01 MSK
Тогда и запуск того, что использует эти модули должен делаться так же
mittorn ★★★★★
( 03.08.23 20:39:49 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от LightDiver 03.08.23 20:38:01 MSK
pip3 install —user?
mittorn ★★★★★
( 03.08.23 20:40:54 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от mittorn 03.08.23 20:36:21 MSK

На гитхабе написано: Python 2 and 3.
У меня dev-lang/python-3.11.4
calculate diver # pip3 install keyboard error: externally-managed-environment × This environment is externally managed ╰─> The system-wide Python installation in Gentoo should be maintained using the system package manager (e.g. emerge). If the package in question is not packaged for Gentoo, please consider installing it inside a virtual environment, e.g.: python -m venv /path/to/venv . /path/to/venv/bin/activate pip install mypackage To exit the virtual environment, run: deactivate The virtual environment is not deleted, and can be re-entered by re-sourcing the activate file. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. calculate diver # python -m venv /path/to/venv calculate diver # . /path/to/venv/bin/activate (venv) calculate diver # pip3 install keyboard Collecting keyboard Downloading keyboard-0.13.5-py3-none-any.whl (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.1/58.1 kB 352.2 kB/s eta 0:00:00 Installing collected packages: keyboard Successfully installed keyboard-0.13.5 [notice] A new release of pip is available: 23.1.2 -> 23.2.1
Это штатная установка модулей в генте. Остальные же модули так установились и работают.
LightDiver ★★★★★
( 03.08.23 20:42:29 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Step 5: Install packages in your Python environment
Applies to:
Visual Studio
Visual Studio for Mac
Visual Studio Code
The Python developer community has produced thousands of useful packages that you can incorporate into your own projects. Visual Studio provides a UI to manage packages in your Python environments.
View environments
- Select the View >Other Windows >Python Environments menu command. The Python Environments window opens as a peer to Solution Explorer and shows the different environments available to you. The list shows both environments that you installed using the Visual Studio installer and environments you installed separately. That includes global, virtual, and conda environments. The environment in bold is the default environment that’s used for new projects. For more information about working with environments, see How to create and manage Python environments in Visual Studio environments.


Note You can also use the Ctrl+K, Ctrl+` keyboard shortcut to open the Python Environments window from the Solution Explorer window. If the shortcut doesn’t work and you can’t find the Python Environments window in the menu, it’s possible that you haven’t installed the Python workload. See How to install Python support in Visual Studio on Windows for guidance about how to install Python.
With a Python project open, you can open the Python Environments window from Solution Explorer. Right-click Python Environments and select View All Python Environments.


from math import radians import numpy as np # installed with matplotlib import matplotlib.pyplot as plt def main(): x = np.arange(0, radians(1800), radians(12)) plt.plot(x, np.cos(x), 'b') plt.show() main()


Install packages using the Python Environments window
- From the Python Environments window, select the default environment for new Python projects and choose the Packages tab. You’ll then see a list of packages that are currently installed in the environment.




Note A small progress bar might appear underneath the environment to indicate that Visual Studio is building its IntelliSense database for the newly-installed package. The IntelliSense tab also shows more detailed information. Be aware that until that database is complete, IntelliSense features like auto-completion and syntax checking won’t be active in the editor for that package.
Visual Studio 2017 version 15.6 and later uses a different and faster method for working with IntelliSense, and displays a message to that effect on the IntelliSense tab.
Run the program
Now that matplotlib is installed, run the program with (F5) or without the debugger (Ctrl+F5) to see the output:
Как использовать pynput для создания кейлоггера на Python
Сегодня мы напишем простой, но эффективный кейлоггер на Python. Кейлоггеры — мощный инструмент в арсенале хакера. В этой небольшой статье я покажу, как использовать pynput для создания кейлоггера на Python.
Как использовать pynput для создания кейлоггера
Пакет pynput.keyboard содержит классы для управления и мониторинга клавиатуры. Pynput — это библиотека Python, которую можно использовать для захвата ввода с клавиатуры.
Установка Pynput
Для начала необходимо установить библиотеку pynput. Установить pynput можно с помощью команды pip :