2009-10-28 74 views
0

我想從一個pict文件捕獲圖稿,並嵌入iTunes使用python appscript軌道。 我做了這樣的事情:應用程序寫iTunes的藝術品

imFile = open('/Users/kartikaiyer/temp.pict','r') 
data = imFile.read() 
it = app('iTunes') 
sel = it.current_track.get() 
sel.artworks[0].data_.set(data[513:]) 

我得到一個錯誤OSERROR:-1731 消息:未知的對象

類似AppleScript的代碼如下所示:

tell application "iTunes" 
    set the_artwork to read (POSIX file "/Users/kartikaiyer/temp.pict") from 513 as picture 
    set data of artwork 1 of current track to the_artwork 
end tell 

我試着用ASTranslate但它從不實例化'the_artwork',然後在引用the_artwork時引發錯誤。任何人都可以幫忙一般來說,我對appscript和python是新手。

回答

0

在快速猜測,Appscript引用,如AppleScript的引用,用1索引,不零索引像Python列表。所以,你可能需要寫:

it.current_track.artworks[1].data_.set(...)

(順便說一下,在你的原劇本額外get命令是不必要的,但無害化在這種情況下)。

至於ASTranslate,您需要啓用'發送事件到應用程序'複選框,如果你想它實際發送命令到應用程序和腳本添加並接收他們的結果。通常,最好禁用此選項,以便在翻譯可能具有破壞性的命令(如setdelete)時不會發生任何不幸事故,因此只有在您確實需要時才啓用它,並且要小心在運行時運行的代碼你做。

+0

Appscript使用零索引,因爲它是Python,而不是AppleScript。 – wbg 2010-06-05 21:26:40

+0

Appscript使用單索引,因爲這是Apple Event Manager使用的。 Appscript代碼可能看起來像Pythonic,但相似之處卻很膚淺 - 只是蘋果事件管理器API周圍的一層薄薄的語法糖,它決定了實際的語義。 – has 2010-06-06 16:27:25

0

read命令腳本附加,這ASTranslate不翻譯成的一部分。使用ASDictionary爲腳本添加創建膠水,方法是單擊「選擇安裝的腳本添加」在「詞典」菜單下,然後從列表中選擇「腳本添加」。

3

這是一個老問題,但因爲我遇到了麻煩,現在正在做同樣的事情,我想我會後我的情況下,其他人可能受益的解決方案。

selected = appscript.app('iTunes').selection.get() 

for t in selected: 
    myArt = open(/path/to/image.jpg,'r') 
    data = myArt.read() 
    t.artworks[1].data_.set(data) # no need to remove header but one-indexed as has said earlier 
    myArt.close() 

希望這會有所幫助。

+0

您可能需要添加一個顯式數據類型:'t.artworks [1] .data_.set(AE :: AEDesc.new(KAE :: TypeJPEG,data))' – crishoj 2013-08-19 21:57:31

相關問題