非常具体的问题:我正在编写一个(python)脚本
- 生成临时文件。
- 启动图像查看器。
- 关闭查看器后,删除TMP文件。
在Linux中,这会很好地工作,因为我会打开Python的子过程并运行以下
eog myimg.png; rm myimg.png
但是,Mac上的故事有所不同。open
命令在不同的过程中启动。如果使用/Applications/Preview.app/MacOS/Preview
,我会发现一个奇怪的权限问题。如果我杀死脚本,离开文件,然后启动terminal.app:
运行open myimg.png
按预期工作。运行/Applications/Preview.app/MacOS/Preview myimg.png
会出现相同的权限错误。(意思是说 - 实际上不是文件权限错误)。和fwiw,该文件无论如何是444。
我的猜测是,打开命令从其他用户运行应用程序,该应用程序可以访问我用户不使用的父目录,类似用户。
无论如何,有人确切地知道发生了什么事,什么是可行的解决方案?谢谢!
编辑当前代码是
name = '/var/folders/qy/w9zq1h3d22ndc2d_7hgwj2zm0000gn/T/tmpDHRg2T.png'
viewer_command = 'open'
subprocess.Popen(viewer_command + ' ' + name +' ; rm ' + name, shell=True)
无论如何,有人确切地知道发生了什么事,什么是可行的解决方案?
很难确定没有更多详细信息(例如,您的脚本运行方式以及您收到的错误消息),但是您的脚本似乎可能是与控制台用户不同的用户,或者在登录上下文中不运行。
上下文是Mac OS X的不寻常功能,并在Apple的内核编程指南(" Bootstrap Contexts")中进行了记录。简而言之,一个未从登录窗口下降的过程启动的过程(例如,通过SSH启动的过程)将无法在该上下文中(例如Windowserver)启动桌面上的服务必要应用程序。
#!/bin/sh
TMP=$(mktemp sperry.XXXXXX.jpg)
echo "Made $TMP"
IMG="/Users/sean_perry/Pictures/Photo Booth Library/Pictures/Photo on 6-8-12 at 4.37 PM.jpg"
cp "$IMG" $TMP
open "$TMP"
rm $TMP
此脚本在我的OSX计算机上正常工作。
也是如此#!/usr/bin/python
import subprocess
subprocess.call(["open", "/Users/me/Pictures/Photo Booth Library/Pictures/Photo on 6-8-12 at 4.37 PM.jpg"])
您可以发布您的吗?