2014-02-07 69 views
1

非常具體的問題:我寫一個(Python)的腳本,應該在運行Mac應用程序作爲父腳本

  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) 
+0

您需要區分線程和進程。使用'open'(Mac命令)意味着單獨的進程,而不僅僅是一個單獨的線程。線程在單個進程內工作,使用單個二進制文件。你所描述的是多個進程 - 在Linux和Mac上。你說「一個奇怪的權限問題」 - 這是什麼意思?信息到底是什麼? –

+0

謝謝,你對線程/進程是正確的。修正了。錯誤是「文件」tmp5ZKcAr。PNG「無法打開,因爲您沒有權限查看它。要查看或更改權限,請在Finder中選擇該項目,然後選擇「文件」>「獲取信息」。 –

+1

不完全確定要查詢的內容,而是要查找「-W」? '-W導致打開,等待其打開的應用程序(或已打開的應用程序)退出。與-n標誌一起使用允許打開 函數作爲$ EDITOR環境變量的適當應用程序。「# – Kevin

回答

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"]) 

你可以發表你的嗎?

+0

你真的跑了第一個嗎?對我來說,它會啓動一個空預覽實例,因爲一旦應用程序啓動,圖像就會被刪除。第二個是接近我的,但沒有證明問題。我將用我的代碼編輯問題。 –

+0

是的,它確實有效。 「open」發生,然後文件被刪除,但應用程序已經加載了圖像。 –

0

無論如何,任何人都知道到底發生了什麼,以及一個可行的解決方案是什麼?

很難肯定地說沒有更多的細節(如您的腳本是如何被運行,你做了什麼錯誤消息),但它很可能是你的腳本或者作爲從控制檯不同的用戶運行用戶,或者不在登錄上下文中運行。

上下文是Mac OS X的一個不常見的功能,並記錄在Apple的Kernel Programming Guide ("Bootstrap Contexts")中。簡而言之,從登錄窗口下降的進程(例如,通過SSH啓動的進程)中不啓動的進程不會有必要訪問該上下文中的服務(例如WindowServer)來啓動桌面應用。

相關問題