Skip to main content

A cross-platform multi-screen shot module in pure python using ctypes

Very basic, it will grab one screen shot by monitor or a screen shot of all monitors and save it to an optimised PNG file, Python 2.7/3.4 compatible & PEP8 compliant.

So, while you can pip install –upgrade mss, you may just drop it in your project and forget about it.

MSS stands for Multi-Screen Shot.

It’s under zlib licence.

Testing

You can try the MSS module directly from the console:

python2 mss.py [--debug]
python3 -X faulthandler mss.py

Passing the –debug argument will make it more verbose.

Instance the good class

You can determine automatically which class to use:

from platform import system
import mss

systems = {
    'Darwin': mss.MSSMac,
    'Linux': mss.MSSLinux,
    'Windows': mss.MSSWindows
    }
mss_class = systems[system()]

Or simply import the good one:

from mss import MSSLinux as mss_class

init(debug)

When initialising an instance of MSS, you can enable debug output:

mss = mss_class(debug=True)

save(output, screen, callback)

For each monitor, grab a screen shot and save it to a file.

Parameters:

output - string - the output filename. It can contain '%d' which
                  will be replaced by the monitor number.
screen - integer - grab one screen shot of all monitors (screen=-1)
                   grab one screen shot by monitor (screen=0)
                   grab the screen shot of the monitor N (screen=N)
callback - function - in case where output already exists, call
                      the defined callback function with output
                      as parameter. If it returns True, then
                      continue; else ignores the monitor and
                      switches to ne next.

This is a generator which returns created files.

Examples

Then, it is quite simple:

mss = mss_class()

try:
    # One screen shot per monitor
    for filename in mss.save():
        print('File: "{}" created.'.format(filename))

    # Screen shot of the monitor 1
    for filename in mss.save(output='monitor-%d.png', screen=1):
        print('File: "{}" created.'.format(filename))

    # A shot to grab them all :)
    for filename in mss.save(output='full-screenshot.png', screen=-1):
        print('File: "{}" created.'.format(filename))

    # Example with a callback
    def on_exists(fname):
        ''' Callback example when we try to overwrite an existing screen shot. '''

        from os import rename
        newfile = fname + '.old'
        print('Renaming "{}" to "{}"'.format(fname, newfile))
        rename(fname, newfile)
        return True

    # Screen shot of the monitor 1, with callback
    for fname in mss.save(output='mon-%d.png', screen=1, callback=on_exists):
        print('File: "{}" created.'.format(fname))
except ScreenshotError as ex:
    print(ex)

Bonus

Just for fun … Show us your screen shot with all monitors in one file, we will update the gallery.

Link to the galley: https://tiger-222.fr/tout/python-mss/galerie/

Metadata

Release files for mss 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mss 0.0.7
File Size Uploaded
mss-0.0.7.tar.gz 10.3 kB Details

Release files / mss-0.0.7.tar.gz

Download URL mss-0.0.7.tar.gz
Size 10.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d51e1a8a7bdb62305ec338e66bb07a001a9194397adc10460fcab0c678da78fe
BLAKE2b-256 checksum
How to use checksums
21ee56f87d6b0996aff1b89360f3153395577bdb7a16588a0765a8ae845137fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

10.2.0

2 release files

10.1.0

2 release files

10.0.0

2 release files

9.0.2

2 release files

9.0.1

2 release files

9.0.0

2 release files

8.0.3

2 release files

8.0.2

2 release files

8.0.1

2 release files

8.0.0

2 release files

7.0.1

2 release files

7.0.0

2 release files

6.1.0

2 release files

6.0.0

2 release files

5.1.0

2 release files

5.0.0

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.3.2

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.1

1 release file

3.2.0

1 release file

3.1.2

1 release file

3.1.1

1 release file

3.1.0

1 release file

3.0.1

1 release file

3.0.0

1 release file

2.0.22

1 release file

2.0.18

1 release file

2.0.0

1 release file

1.0.2

1 release file

1.0.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

0.0.8

1 release file

This release

0.0.7 This release

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page