2010-01-04 17 views
5

当试图加载iTunes XML/plist文件时,我得到“内部表溢出”。谷歌搜索后,它看起来像Applescript已经耗尽内存。该文件在磁盘上是18兆,所以在大部分情况下,它仍然可以在带有2个演出的Mac上工作。如何解决Applescript中的“内部表溢出”

我怎样才能解决这个问题?

很明显,因为它是由iTunes中创建,我无法控制许多生成它。

更新:有关片段:

tell application "System Events" 
    tell property list file (itunes_xml_file as string) 
     tell contents 
      set my_tracks to value of property list item "Tracks" 
      repeat with t in items of my_tracks 
+0

如果不知道你用什么方法来加载文件,很难说出问题所在。你可以发布你用来加载XML文件的代码吗? – 2010-01-04 05:58:10

+0

当然可以。我会更新。 – Bill 2010-01-04 07:34:21

回答

2

我想,AppleScript的根本就没有做出处理这个数据量。我试着再次使用AppleScript,并试图做类似的事情(阅读iTunes资料库)。 AppleScript的初衷是通过向他们发送AppleEvents来自动化应用程序 - 这与AppleScript的怪异语法结合在一起,会让很多人困惑,并且很难做很多简单的事情。

经过一番折腾一次,我决定使用Python来代替,因为它提供了一个简单的模块,用于读取的plist文件:http://docs.python.org/dev/library/plistlib.html

可能不是你想要听到的,但使用AppleScript的问题是,它是很容易因为它所处理的数据的抽象性非常庞大,并占用大量内存。

我敢肯定,如果你给Python的一个尝试,你就会有一些启动和运行,在不到一个小时。 Python默认安装在所有的Mac上,并且非常容易学习。

+0

此外,如果您需要执行AppleScript所做的操作,则可以使用Python模块appscript(http://appscript.sourceforge.net/)从Python执行相同的操作;我没有使用过Python版本,但是我已经使用了Ruby版本,而且非常好。 – 2010-01-09 22:56:27

+0

谢谢。如果没有人能够真正回答如何以这种方式做到这一点,那么我将看看如何将Python切换为Plan B. – Bill 2010-01-10 01:02:48

1

OS版本10.6.8

更新:确认有效性
最初写下面我试​​图在手恢复的代码,但无法重现的错误和“删除”藏后它后。
刚才在装载了load script通话,最初由运行处理程序处理,由CLI osascript(1)程序调用的选项 - 解析脚本加载一个不存在的,一个存在的文件路径时发生的错误。这次它是可以恢复的,我有信心取消“删除”它。

总之,我的解决办法是改变anyone_else's POSIX file path_posixAppleScript's POSIX file path_posix

一些关系
写下面我之后现在认识到,我第一次只看到了“iTunes”的,错过了相关的第一线与tell app "system events"和使用它的property list file这可能/实际上/某种程度上可能与我的问题有关info for a POSIX file
与OP/question相关的注释:文件或别名as string给出以冒号分隔的“HFS”路径。系统事件处理两者。

我的问题
在脚本加载脚本我有从下面的块error "Internal table overflow." number -2707
当我使用〜IPC〜(app app_name's handler_name())调用块的处理程序时(当我更彻底地调查它,但之前我遇到过它 - 没有IPC)时,它被发出。

try 
    set file_modified_date to (info for my POSIX file file_path_posix)'s modification date 
    true 
on error error_message number error_number from error_source partial result error_result to error_class 
    if {error_number} is not in {-43, -37} then error error_message number error_number from error_source partial result error_result to error_class 
    false 
end try 

A((?))母公司这个脚本(用于my),值得一提的,是current application(之间有些水平)(编译和 “的AppleScript编辑器” 捆绑运行作为一个独立的.app)

我的解决方案
更改

set file_modified_date to (info for my POSIX file file_path_posix)'s modification date 

set file_modified_date to (info for AppleScript's POSIX file file_path_posix)'s modification date 

解决了这个问题 - 现在。

思考
我猜不同〜模块〜有处理的事情像POSIX fileinfo for(打开“脚本添加” /展期(OSAX不同的“表”(现在不太多C))“标准增补“,因为它们(两者)仍然存在,是不是?)。

希望这会有所帮助,而且我的详细程度(和括号)没有松动或混淆你:)晚安。

陷“轮发祥地
围绕内存严重:(防止垃圾邮件让我降级所有,但2个超链接 - 给我一些代表,我会解决它:P)。
•这些著名〜有[此错误代码](http://lists.apple.com/archives/applescript-users/2005/Jul/msg00166.html)与一个相关但也许其他来源(并提及他的库加载器)通过列表。 apple.com。
•一些[良好质疑](http://lists.apple.com/archives/applescript-implementors/2005/Jun/msg00104.html),下面的一些可能是一个稍微打哈欠的答案:
•cs .cmu.edu提供了(120625)一个pascal source from 1992,它定义了与我的本地/系统/库/框架/碳框架/版本/框架/开箱脚本。框架/版本/框架/开发人员/开发脚本.http://www.hp.com/developerworks/default.aspx相同的限制。 •最后还有一个与macscripter.net有较远距离相关的[大脚本问题](http://macscripter.net/viewtopic.php?id=11760) - 一个关于applescript的知识和资源收集的良好论坛。