Merge pull request #6783 from radarhere/grabclipboard

If available, use wl-paste or xclip for grabclipboard() on Linux
This commit is contained in:
Hugo van Kemenade 2022-12-29 12:01:24 +02:00 committed by GitHub
commit e107af41a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 4 deletions

View File

@ -64,9 +64,13 @@ $bmp = New-Object Drawing.Bitmap 200, 200
) )
p.communicate() p.communicate()
else: else:
with pytest.raises(NotImplementedError) as e: if not shutil.which("wl-paste"):
ImageGrab.grabclipboard() with pytest.raises(
assert str(e.value) == "ImageGrab.grabclipboard() is macOS and Windows only" NotImplementedError,
match="wl-paste or xclip is required for"
r" ImageGrab.grabclipboard\(\) on Linux",
):
ImageGrab.grabclipboard()
return return
ImageGrab.grabclipboard() ImageGrab.grabclipboard()

View File

@ -132,4 +132,18 @@ def grabclipboard():
return BmpImagePlugin.DibImageFile(data) return BmpImagePlugin.DibImageFile(data)
return None return None
else: else:
raise NotImplementedError("ImageGrab.grabclipboard() is macOS and Windows only") if shutil.which("wl-paste"):
args = ["wl-paste"]
elif shutil.which("xclip"):
args = ["xclip", "-selection", "clipboard", "-t", "image/png", "-o"]
else:
raise NotImplementedError(
"wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux"
)
fh, filepath = tempfile.mkstemp()
subprocess.call(args, stdout=fh)
os.close(fh)
im = Image.open(filepath)
im.load()
os.unlink(filepath)
return im