从Python脚本在Finder窗口中设置背景时的文件长度限制

时间:2012-10-14 17:57:20

标签: python macos applescript

我有兴趣在Python上在MacOS X上创建dmg磁盘映像,并且遇到了以下解决方案:How do I create a nice-looking DMG for Mac OS X using command-line tools?

但是,我遇到了与路径长度相关的奇怪问题。以下脚本说明了我的问题:

import os
import Image

for NAME in ['works', 'doesnotwork']:

    if os.path.exists(NAME + '.dmg'):
        os.remove(NAME + '.dmg')

    if os.path.exists('/Volumes/' + NAME):
        raise Exception("Need to eject /Volumes/%s first" % NAME)

    nx = 256
    ny = 256

    image = Image.new("RGB", (nx, ny))

    for i in range(nx):
        for j in range(ny):
            image.putpixel((i, j), (i, 0, j))

    os.system('hdiutil create -volname %s -fs HFS+ -size 10m %s.dmg' % (NAME, NAME))
    os.system('hdiutil attach -readwrite -noverify -noautoopen %s.dmg' % NAME)

    os.mkdir('/Volumes/%s/.background' % NAME)
    image.save('/Volumes/%s/.background/background.png' % NAME, 'PNG')

    apple_script = """osascript<<END
    tell application "Finder"
       tell disk "%s"
           open
           set current view of container window to icon view
           set toolbar visible of container window to false
           set statusbar visible of container window to false
           set the bounds of container window to {{100, 100, 355, 355}}
           set theViewOptions to the icon view options of container window
           set the background picture of theViewOptions to file ".background:background.png"
           close
           open
       end tell
    end tell
    END""" % NAME

    os.system(apple_script)

如果运行,背景将在名为“works”的磁盘映像中正确设置,而不是在名为“didnotwork”的磁盘映像中设置。似乎我的卷名限制为5个字符。但是,如果我缩短用于存储背景的文件夹的名称,例如到.bkg而不是.background,我可以使用更长的卷名,这表明这是一个与整个路径长度相关的问题。有谁知道路径长度有什么限制?是否有允许任意长路径的解决方法?

编辑:我使用的是MacOS 10.6 - 该脚本似乎在10.7上正常运行

1 个答案:

答案 0 :(得分:0)

我相信你必须逃避你的报价。如果不转义它们,就不能在引号内引用引号。例如它应该是,告诉应用程序\“Finder \”。您有很多地方没有正确使用您的报价。如果您查看链接到该人的示例脚本,请巧妙地使用单引号和双引号来避免此问题。我建议你解决这个问题。

另外,你不能像这样引用AppleScript中的文件......“。background:background.png”。当路径以句点开头时,Applescript不知道这意味着什么。 AppleScript中的路径以Macintosh HD的硬盘名称开头。你需要以适当的applescript格式将整个路径放在那里。这也需要引用转义报价。

祝你好运。