Skip to content

Commit

Permalink
Merge pull request #6783 from radarhere/grabclipboard
Browse files Browse the repository at this point in the history
If available, use wl-paste or xclip for grabclipboard() on Linux
  • Loading branch information
hugovk committed Dec 29, 2022
2 parents f452f9a + 73a2c30 commit e107af4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
10 changes: 7 additions & 3 deletions Tests/test_imagegrab.py
Expand Up @@ -64,9 +64,13 @@ def test_grabclipboard(self):
)
p.communicate()
else:
with pytest.raises(NotImplementedError) as e:
ImageGrab.grabclipboard()
assert str(e.value) == "ImageGrab.grabclipboard() is macOS and Windows only"
if not shutil.which("wl-paste"):
with pytest.raises(
NotImplementedError,
match="wl-paste or xclip is required for"
r" ImageGrab.grabclipboard\(\) on Linux",
):
ImageGrab.grabclipboard()
return

ImageGrab.grabclipboard()
Expand Down
16 changes: 15 additions & 1 deletion src/PIL/ImageGrab.py
Expand Up @@ -132,4 +132,18 @@ def grabclipboard():
return BmpImagePlugin.DibImageFile(data)
return None
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

0 comments on commit e107af4

Please sign in to comment.