1

我有兴趣从 Python 在 MacOS X 上创建 dmg 磁盘映像,并遇到了以下解决方案:如何使用命令行工具为 Mac OS X 创建漂亮的 DMG?

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

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”的磁盘映像中正确设置,而不是在名为“doesnotwork”的磁盘映像中。似乎我的卷名限制为 5 个字符。但是,如果我缩短用于存储背景的文件夹的名称,例如改为.bkg而不是.background,那么我可以使用更长的卷名,这表明这是与整个路径的长度有关的问题。有谁知道路径长度限制在什么级别?是否有允许任意长路径的解决方法?

编辑:我正在使用 MacOS 10.6 - 脚本似乎在 10.7 上正常工作

4

1 回答 1

0

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

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

祝你好运。

于 2012-10-14T22:43:19.990 回答