Python Can';t使用PIL在mac上打开图像

Python Can';t使用PIL在mac上打开图像,python,macos,python-imaging-library,Python,Macos,Python Imaging Library,因此,我有一个简短的python脚本,它接受一个表示图像的base64字符串,然后打开该图像的预览 这是我的剧本: #!/usr/local/bin/python3 from PIL import Image import sys import base64 IMAGE_NAME = "temp.png" def do_some_stuff(args): if len(args) != 2: return with open(IMAGE_NAME, "wb

因此,我有一个简短的python脚本,它接受一个表示图像的base64字符串,然后打开该图像的预览

这是我的剧本:

#!/usr/local/bin/python3

from PIL import Image
import sys
import base64

IMAGE_NAME = "temp.png"

def do_some_stuff(args):
    if len(args) != 2:
        return

    with open(IMAGE_NAME, "wb") as image_file:
        image_file.write(base64.decodebytes(args[1].encode('ascii')))

    image = Image.open(IMAGE_NAME)
    image.show()


if __name__ == '__main__':
    do_some_stuff(sys.argv)
它似乎工作正常,除了有时间显示图像时,我遇到了以下错误:

FSPathMakeRef(/Applications/Preview.app)失败,错误为-43。


有人知道为什么会发生此错误或如何修复它吗?

在进一步挖掘之后,似乎来自
FSPathMakeRef
的此错误意味着找不到该文件。所以我查看了我的应用程序文件夹,预览就在那里

当我单击“获取信息”时,我注意到它位于
/System/Applications/
文件夹中,而不在
/Applications
中,因此PIL似乎引用了错误的位置

我的猜测是,该应用程序已在Catalina移动,而PIL尚未更新

无论如何,为了修复它,我只是做了一个符号链接,其中PIL看起来像这样:

ln -s /System/Applications/Preview.app /Applications/Preview.app

它就像一个符咒

在进一步挖掘之后,来自
FSPathMakeRef
的这个错误似乎意味着找不到该文件。所以我查看了我的应用程序文件夹,预览就在那里

当我单击“获取信息”时,我注意到它位于
/System/Applications/
文件夹中,而不在
/Applications
中,因此PIL似乎引用了错误的位置

我的猜测是,该应用程序已在Catalina移动,而PIL尚未更新

无论如何,为了修复它,我只是做了一个符号链接,其中PIL看起来像这样:

ln -s /System/Applications/Preview.app /Applications/Preview.app

它就像一个符咒

始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(不是评论)。还有其他有用的信息。@furas,这是完整的错误消息,它将显示并添加您使用的base64字符串。也许这不是正确的图像。或者它可能不是
.png
,而是其他格式。@furas base64是一个有效的png字符串,我确认我自己-你必须相信我的话,因为我使用的图像是我不想上传的面部照片。更新了问题并提供了更多信息,请使用
导入os
打印(os.getcwd())
查看python在哪个文件夹中运行此代码-(当前工作目录)。它应该写在这个目录中-如果它有这个权限的话。总是把完整的错误信息(从单词“Traceback”开始)作为文本(不是截图)放在问题中(不是评论)。还有其他有用的信息。@furas,这是完整的错误消息,它将显示并添加您使用的base64字符串。也许这不是正确的图像。或者它可能不是
.png
,而是其他格式。@furas base64是一个有效的png字符串,我确认我自己-你必须相信我的话,因为我使用的图像是我不想上传的面部照片。更新了问题并提供了更多信息,请使用
导入os
打印(os.getcwd())
查看python在哪个文件夹中运行此代码-(当前工作目录)。它应该写在这个目录中-如果它有这个的所有权限。