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

scipy imshow conflict with El Capitan SIP and /var/folders/

我 运行 遇到了一些权限问题,我确信有一个快速修复程序,但我找不到它。

设置: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. 或者,有没有办法授予预览权限 在不禁用 SIP 的情况下读出 /var/folder/。

谢谢!

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

在 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 对预览应用程序的引用有效。后一种方法有一个更普遍的错误。

不过还有一个更大的问题,我可能会在单独的 post 中提出。来自 bash:

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

这应该会导致预览打开文件。但它却引发了权限错误,似乎与文件所在的位置无关。