在与父脚本相同的线程中运行MAC应用程序



非常具体的问题:我正在编写一个(python)脚本

  1. 生成临时文件。
  2. 启动图像查看器。
  3. 关闭查看器后,删除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"])

您可以发布您的吗?

最新更新