Skip to main content

Monitor and control user input devices

Project description

pynput

This library allows you to control and monitor input devices.

Currently, mouse and keyboard input and monitoring are supported.

Controlling the mouse

Use pynput.mouse.Controller like this:

from pynput.mouse import Button, Controller

mouse = Controller()

# Read pointer position
print('The current pointer position is {0}'.format(
    mouse.position))

# Set pointer position
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(
    mouse.position))

# Move pointer relative to current position
mouse.move(5, -5)

# Press and release
mouse.press(Button.left)
mouse.release(Button.left)

# Double click; this is different from pressing and releasing
# twice on Mac OSX
mouse.click(Button.left, 2)

# Scroll two steps down
mouse.scroll(0, 2)

Monitoring the mouse

Use pynput.mouse.Listener like this:

from pynput.mouse import Listener

def on_move(x, y):
    print('Pointer moved to {0}'.format(
        (x, y)))

def on_click(x, y, button, pressed):
    print('{0} at {1}'.format(
        'Pressed' if pressed else 'Released',
        (x, y)))
    if not pressed:
        # Stop listener
        return False

def on_scroll(dx, dy):
    print('Scrolled {0}'.format(
        (x, y)))

# Collect events until released
with Listener(
        on_move=on_move,
        on_click=on_click,
        on_scroll=on_scroll) as listener:
    listener.join()

A mouse listener is a threading.Thread, and all callbacks will be invoked from the thread.

Call pynput.mouse.Listener.stop from anywhere, or raise pynput.mouse.Listener.StopException or return False from a callback to stop the listener.

On Windows, virtual events sent by other processes may not be received. This library takes precautions, however, to dispatch any virtual events generated to all currently running listeners of the current process.

Controlling the keyboard

Use pynput.keyboard.Controller like this:

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')

Monitoring the keyboard

Use pynput.keyboard.Listener like this:

from pynput.keyboard import Key, Listener

def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

A keyboard listener is a threading.Thread, and all callbacks will be invoked from the thread.

Call pynput.keyboard.Listener.stop from anywhere, or raise pynput.keyboard.Listener.StopException or return False from a callback to stop the listener.

Starting a keyboard listener may be subject to some restrictions on your platform.

On Mac OSX, one of the following must be true:

  • The process must run as root.

  • Your application must be white listed under Enable access for assistive devices. Note that this might require that you package your application, since otherwise the entire Python installation must be white listed.

On Windows, virtual events sent by other processes may not be received. This library takes precautions, however, to dispatch any virtual events generated to all currently running listeners of the current process.

Release Notes

v1.0.4 - Fixes for clicking and scrolling on Windows

  • Corrected name of mouse input field when sending click and scroll events.

v1.0.3 - Fixes for Python 3 on Windows

  • Corrected use of ctypes on Windows.

v1.0.2 - Fixes for thread identifiers

  • Use thread identifiers to identify threads, not Thread instances.

v1.0.1 - Fixes for Python 3

  • Corrected bugs which prevented the library to be used on Python 3.

v1.0 - Stable Release

  • Changed license to LGPL.

  • Corrected minor bugs and inconsistencies.

  • Corrected and extended documentation.

v0.6 - Keyboard Monitor

  • Added support for monitoring the keyboard.

  • Corrected wheel packaging.

  • Corrected deadlock when stopping a listener in some cases on X.

  • Corrected key code constants on Mac OSX.

  • Do not intercept events on Mac OSX.

v0.5.1 - Do not die on dead keys

  • Corrected handling of dead keys.

  • Corrected documentation.

v0.5 - Keyboard Modifiers

  • Added support for modifiers.

v0.4 - Keyboard Controller

  • Added keyboard controller.

v0.3 - Cleanup

  • Moved pynput.mouse.Controller.Button to top-level.

v0.2 - Initial Release

  • Support for controlling the mouse on Linux, Mac OSX and Windows.

  • Support for monitoring the mouse on Linux, Mac OSX and Windows.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pynput-1.0.4-py3.4.egg (130.2 kB view details)

Uploaded Egg

pynput-1.0.4-py3-none-any.whl (202.5 kB view details)

Uploaded Python 3

pynput-1.0.4-py2.7.egg (129.7 kB view details)

Uploaded Egg

pynput-1.0.4-py2-none-any.whl (202.5 kB view details)

Uploaded Python 2

File details

Details for the file pynput-1.0.4-py3.4.egg.

File metadata

  • Download URL: pynput-1.0.4-py3.4.egg
  • Upload date:
  • Size: 130.2 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pynput-1.0.4-py3.4.egg
Algorithm Hash digest
SHA256 338c6cbe9d066d3beb02cd5250d3f07822c211c9d82f578d7e66210b97232c01
MD5 9dcd98aabafcb5285f8633ff2b89c2f7
BLAKE2b-256 db4c2fa86cc354baf53bc7289ada6da72e8c41012772d4b1b436bc0b4a4224ea

See more details on using hashes here.

File details

Details for the file pynput-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for pynput-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9c5e9a3de0450a3f1224c43666a473dec1a1d7eb2a5e94f48b8096f81c3384a7
MD5 dfb00eff17c10d0dda9c01453d36bc4d
BLAKE2b-256 814a9801dd7e1c4eb4634be3d89d72ac568e896167b1bf7c136e212787df7563

See more details on using hashes here.

File details

Details for the file pynput-1.0.4-py2.7.egg.

File metadata

  • Download URL: pynput-1.0.4-py2.7.egg
  • Upload date:
  • Size: 129.7 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pynput-1.0.4-py2.7.egg
Algorithm Hash digest
SHA256 f1baafd32e6f07f53f12d99358086272c61d4f66d0b7480ddc2ca5ab37ea0c54
MD5 b23a3a94f57caba458ec285f013f73cd
BLAKE2b-256 cbf4fa1eb890744a89792058fabff23cd7310ef505ae1649ab9752341906f21a

See more details on using hashes here.

File details

Details for the file pynput-1.0.4-py2-none-any.whl.

File metadata

File hashes

Hashes for pynput-1.0.4-py2-none-any.whl
Algorithm Hash digest
SHA256 2a4f0ae56c406e8334223be34f30aa2cc68f6776cc6be7bb79b1224260a92788
MD5 e811ee8d6b7c71a6f7954293a6b00752
BLAKE2b-256 3ed249f0b33b7c811e7fd57795d2fcbd91134547d8e8e62e0971e6ec75e59324

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page