非常具体的问题:我正在写一个应该
的(Python)脚本在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。
我的猜测是open命令运行来自不同用户的应用程序,允许访问我的用户未使用的父目录,就像这样。
无论如何,任何人都知道到底发生了什么,以及可行的解决方案是什么?谢谢!
修改 目前的代码是
name = '/var/folders/qy/w9zq1h3d22ndc2d_7hgwj2zm0000gn/T/tmpDHRg2T.png'
viewer_command = 'open'
subprocess.Popen(viewer_command + ' ' + name +' ; rm ' + name, shell=True)
答案 0 :(得分:0)
#!/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"])
你可以张贴你的吗?
答案 1 :(得分:0)
无论如何,任何人都知道到底发生了什么,以及可行的解决方案是什么?
如果没有更多详细信息(比如您的脚本运行方式以及您收到的错误消息),很难说肯定,但您的脚本可能是以与控制台用户不同的用户身份运行,或者没有在登录上下文中运行。
上下文是Mac OS X的一个不寻常的功能,并在Apple的Kernel Programming Guide ("Bootstrap Contexts")中有记录。简而言之,未从登录窗口下载的进程启动的进程(例如,通过SSH启动的进程)将无法访问该上下文中的服务(例如WindowServer)以启动桌面应用