Skip to content

ImageShow.show() for DisplayViewer doesn't work if no title is given #6146

@csarn

Description

@csarn

To reproduce the bug, just run ".show()" on any image object, while only having imagemagick's display viewer on the PATH.

from PIL import Image
Image.new('RGB', (10, 10)).show()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.10/site-packages/PIL/Image.py", line 2259, in show
    _show(self, title=title)
  File "/usr/lib/python3.10/site-packages/PIL/Image.py", line 3233, in _show
    ImageShow.show(image, **options)
  File "/usr/lib/python3.10/site-packages/PIL/ImageShow.py", line 55, in show
    if viewer.show(image, title=title, **options):
  File "/usr/lib/python3.10/site-packages/PIL/ImageShow.py", line 79, in show
    return self.show_image(image, **options)
  File "/usr/lib/python3.10/site-packages/PIL/ImageShow.py", line 105, in show_image
    return self.show_file(self.save_image(image), **options)
  File "/usr/lib/python3.10/site-packages/PIL/ImageShow.py", line 212, in show_file
    subprocess.Popen(args)
  File "/usr/lib/python3.10/subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.10/subprocess.py", line 1775, in _execute_child
    self.pid = _posixsubprocess.fork_exec(
TypeError: expected str, bytes or os.PathLike object, not NoneType

The reason is that the DisplayViewer class just appends options["title"] to the argument list:

args += ["-title", options["title"]]

But the default value for title is None:
def show(image, title=None, **options):

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugAny unexpected behavior, until confirmed feature.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions