mirror of
https://github.com/python-pillow/Pillow.git
synced 2026-02-03 22:15:52 +03:00
Raise error if subprocess gives non-zero returncode
This commit is contained in:
parent
b0a5bc2a6b
commit
04ee0cc3b1
|
|
@ -60,12 +60,20 @@ class TestImageGrab:
|
|||
ImageGrab.grab(xdisplay="error.test:0.0")
|
||||
assert str(e.value).startswith("X connection failed")
|
||||
|
||||
@pytest.mark.skipif(sys.platform != "win32", reason="Windows only")
|
||||
@pytest.mark.skipif(
|
||||
sys.platform not in ("darwin", "win32"), reason="macOS and Windows only"
|
||||
)
|
||||
def test_grab_invalid_handle(self) -> None:
|
||||
with pytest.raises(OSError, match="unable to get device context for handle"):
|
||||
ImageGrab.grab(window=-1)
|
||||
with pytest.raises(OSError, match="screen grab failed"):
|
||||
ImageGrab.grab(window=0)
|
||||
if sys.platform == "darwin":
|
||||
with pytest.raises(subprocess.CalledProcessError):
|
||||
ImageGrab.grab(window=-1)
|
||||
else:
|
||||
with pytest.raises(
|
||||
OSError, match="unable to get device context for handle"
|
||||
):
|
||||
ImageGrab.grab(window=-1)
|
||||
with pytest.raises(OSError, match="screen grab failed"):
|
||||
ImageGrab.grab(window=0)
|
||||
|
||||
def test_grabclipboard(self) -> None:
|
||||
if sys.platform == "darwin":
|
||||
|
|
|
|||
|
|
@ -43,25 +43,29 @@ def grab(
|
|||
fh, filepath = tempfile.mkstemp(".png")
|
||||
os.close(fh)
|
||||
args = ["screencapture"]
|
||||
if window:
|
||||
if window is not None:
|
||||
args += ["-l", str(window)]
|
||||
elif bbox:
|
||||
left, top, right, bottom = bbox
|
||||
args += ["-R", f"{left},{top},{right-left},{bottom-top}"]
|
||||
subprocess.call(args + ["-x", filepath])
|
||||
args += ["-x", filepath]
|
||||
retcode = subprocess.call(args)
|
||||
if retcode:
|
||||
raise subprocess.CalledProcessError(retcode, args)
|
||||
im = Image.open(filepath)
|
||||
im.load()
|
||||
os.unlink(filepath)
|
||||
if bbox:
|
||||
if window:
|
||||
if window is not None:
|
||||
# Determine if the window was in Retina mode or not
|
||||
# by capturing it without the shadow,
|
||||
# and checking how different the width is
|
||||
fh, filepath = tempfile.mkstemp(".png")
|
||||
os.close(fh)
|
||||
subprocess.call(
|
||||
["screencapture", "-l", str(window), "-o", "-x", filepath]
|
||||
)
|
||||
args = ["screencapture", "-l", str(window), "-o", "-x", filepath]
|
||||
retcode = subprocess.call(args)
|
||||
if retcode:
|
||||
raise subprocess.CalledProcessError(retcode, args)
|
||||
with Image.open(filepath) as im_no_shadow:
|
||||
retina = im.width - im_no_shadow.width > 100
|
||||
os.unlink(filepath)
|
||||
|
|
@ -125,7 +129,10 @@ def grab(
|
|||
raise
|
||||
fh, filepath = tempfile.mkstemp(".png")
|
||||
os.close(fh)
|
||||
subprocess.call(args + [filepath])
|
||||
args.append(filepath)
|
||||
retcode = subprocess.call(args)
|
||||
if retcode:
|
||||
raise subprocess.CalledProcessError(retcode, args)
|
||||
im = Image.open(filepath)
|
||||
im.load()
|
||||
os.unlink(filepath)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user