代码之家  ›  专栏  ›  技术社区  ›  Darren McAffee

scipy imshow与El Capitan SIP和/var/folders冲突/

  •  0
  • Darren McAffee  · 技术社区  · 8 年前

    我遇到了一些权限问题,我确信有一个快速解决方案,但我找不到。

    设置:Mac,OSX:El Capitan,Anaconda,Python3.5.1

    从bash(使预览成为默认查看器):

    export SCIPY_PIL_IMAGE_VIEWER=/Applications/Preview.app/Contents/MacOS/Preview

    来自口译员:

    import scipy.misc as mi
    
    im1 = mi.imread('local_filename.png')
    mi.imshow(im1)
    

    从预览中输出以下错误:文件tmph_9q7lwu。无法打开png,因为您没有查看它的权限。

    此文件的路径位于:/var/folders/w4/wrnzszgd41d7064lx64nc10h0000gn/T/

    它的权限是:-rw------,预览应用的UID:501(我自己)

    我觉得这是一个El Capitan SIP(系统完整性保护)问题,这就引出了我的问题:

    1. 有办法让scipy将临时文件写入文件夹吗 可通过预览访问,
    2. 或者,有没有办法给予预览权限 读取/var/folder/而不禁用SIP。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   Darren McAffee    8 年前

    我发现了一个有效的小技巧,有两个步骤:

    在pilutil内。py、编辑行381+(在def-imshow下),

    import os
    import time #Me: 1. needed later
    os.close(fnum)
    
    cmd = os.environ.get('SCIPY_PIL_IMAGE_VIEWER', 'see') 
    cmd = 'open'  #Me: 2. User added line
    print(fname)
    status = os.system("%s %s" % (cmd, fname))
    
    time.sleep(0.1) #Me: 1.    
    os.unlink(fname)
    

    步骤1.预览需要时间延迟(0.05太快)。否则,取消链接会在预览正确显示文件之前删除该文件。

    步骤2.使用 open 而不是 $SCIPY_PIL_IMAGE_VIEWER 对预览应用程序的引用有效。后一种方法有更普遍的错误。

    但还有一个更大的问题,我可能会在另一篇文章中提出。从bash中:

    /Applications/Preview.app/Contents/MacOS/Preview /path/to/file
    

    这将导致预览打开文件。但相反,它引发了权限错误,似乎与文件的位置无关。