from easyprocess import EasyProcess from pyscreenshot.plugins.backend import UNKNOWN_VERSION, CBackend from pyscreenshot.tempexport import read_prog_img from pyscreenshot.util import platform_is_osx PROGRAM = "screencapture" # https://ss64.com/osx/screencapture.html # By default screenshots are saved as .png files, class ScreencaptureError(Exception): pass class ScreencaptureWrapper(CBackend): name = "mac_screencapture" is_subprocess = True def grab(self, bbox=None): if not platform_is_osx(): raise ScreencaptureError("This backend runs only on Darwin") command = [PROGRAM, "-x"] if bbox: width = bbox[2] - bbox[0] height = bbox[3] - bbox[1] command += ["-R{},{},{},{}".format(bbox[0], bbox[1], width, height)] im = read_prog_img(command) return im def backend_version(self): p = EasyProcess([PROGRAM, "-help"]) p.enable_stdout_log = False p.enable_stderr_log = False p.call() if p.return_code == 0: return UNKNOWN_VERSION