diff --git a/Tests/test_imageshow.py b/Tests/test_imageshow.py index da91e35c77f..244c18d91e1 100644 --- a/Tests/test_imageshow.py +++ b/Tests/test_imageshow.py @@ -14,6 +14,9 @@ def test_register(self): # Test registering a viewer that is not a class ImageShow.register("not a class") + # Restore original state + ImageShow._viewers.pop() + def test_show(self): class TestViewer: methodCalled = False @@ -28,6 +31,9 @@ def show(self, image, title=None, **options): self.assertTrue(ImageShow.show(im)) self.assertTrue(viewer.methodCalled) + # Restore original state + ImageShow._viewers.pop(0) + def test_viewer(self): viewer = ImageShow.Viewer() @@ -35,6 +41,10 @@ def test_viewer(self): self.assertRaises(NotImplementedError, viewer.get_command, None) + def test_viewers(self): + for viewer in ImageShow._viewers: + viewer.get_command('test.jpg') + if __name__ == '__main__': unittest.main() diff --git a/src/PIL/ImageShow.py b/src/PIL/ImageShow.py index b50d6135884..7d758c737c8 100644 --- a/src/PIL/ImageShow.py +++ b/src/PIL/ImageShow.py @@ -17,6 +17,8 @@ from PIL import Image import os import sys +import subprocess +import tempfile if sys.version_info.major >= 3: from shlex import quote @@ -128,6 +130,21 @@ def get_command(self, file, **options): quote(file)) return command + def show_file(self, file, **options): + """Display given file""" + f, path = tempfile.mkstemp() + f.write(file) + f.close() + with open(path, "r") as f: + subprocess.Popen([ + 'im=$(cat);' + 'open -a /Applications/Preview.app $im;' + 'sleep 20;' + 'rm -f $im' + ], shell=True, stdin=f) + os.remove(path) + return 1 + register(MacViewer) else: @@ -148,11 +165,23 @@ class UnixViewer(Viewer): format = "PNG" options = {'compress_level': 1} + def get_command(self, file, **options): + command = self.get_command_ex(file, **options)[0] + return "(%s %s; rm -f %s)&" % (command, quote(file), quote(file)) + def show_file(self, file, **options): - command, executable = self.get_command_ex(file, **options) - command = "(%s %s; rm -f %s)&" % (command, quote(file), - quote(file)) - os.system(command) + """Display given file""" + f, path = tempfile.mkstemp() + f.write(file) + f.close() + with open(path, "r") as f: + command = self.get_command_ex(file, **options)[0] + subprocess.Popen([ + 'im=$(cat);' + + command+' $im;' + 'rm -f $im' + ], shell=True, stdin=f) + os.remove(path) return 1 # implementations