2012-10-14 3 views
1

내가 파이썬에서 맥 OS X에 DMG 디스크 이미지를 만드는 데 관심이 파이썬 스크립트에서 찾기 창에 배경을 설정하고 다음과 같은 솔루션을 가로 질러 왔을 때 : 그러나 How do I create a nice-looking DMG for Mac OS X using command-line tools?파일 길이 제한

, 나는 이상한로 실행하고 경로 길이와 관련된 문제. 'doesnotwork'라는 하나에서 실행하면 배경이 제대로 호출 디스크 이미지에서 설정 얻을 것이다

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) 

가 '작동', 그리고 다음 스크립트는 내 문제를 보여줍니다. 볼륨 이름은 5 자로 제한됩니다. 그러나 폴더의 이름을 줄이면 배경을 저장하는 데 사용됩니다 (예 : .background 대신 .bkg으로 변경하면 더 긴 볼륨 이름을 사용할 수 있습니다. 이는 전체 경로의 길이와 관련된 문제임을 나타냅니다. 누구든지 경로 길이에 제한이 있다는 것을 어느 수준에서 알 수 있습니까? 임의로 긴 경로를 허용하는 해결 방법이 있습니까?

편집 : 나는 맥 OS 10.6를 사용하고 - 스크립트는 당신이 당신의 따옴표를 탈출해야 믿고 10.7

+0

10.6.8 여기에서 스크립트가 올바르게 작동합니다. – nneonneo

+0

수용 할 수있는 가장 긴 볼륨 이름을 정확히 나타낼 수 있습니까? – nneonneo

+0

@nneonneo - 위의 예에서 "NAME"을 (를) 5 자 이상으로 만들 수 없습니다. ''.background''를''.back''으로 바꾸면 8을 넘지 않아도되고,''.b''로 바뀌면 9 이상으로 만들 수 있습니다. 이상한! 나는 또한 10.6으로 다른 기계에서 재현 할 수 없다. 무엇이 이것을 일으킬 수 있습니까? (필자는이 컴퓨터에서 FileVault를 사용합니다. 그 일을 할 수 있습니까?) – astrofrog

답변

0

에서 제대로 작동하는 것 같다. 따옴표 안에 이스케이프하지 않고 따옴표를 사용할 수 없습니다. 예를 들어 application \ "Finder \"라고 말해야합니다. 따옴표가 제대로 사용되지 않는 곳이 많습니다. 예제 스크립트를 보면 그 사람과 연결된 사람은 작은 따옴표와 큰 따옴표를 사용하여이 문제를 피할 수 있습니다. 제 제안은 그 문제를 해결 한 것입니다.

또한 "... background : background.png"와 같이 applescript에서 파일을 참조 할 수 없습니다. AppleScript는 경로가 마침표로 시작될 때 그것이 의미하는 것이 무엇인지 알지 못합니다. AppleScript의 경로는 Macintosh HD와 같은 하드 드라이브의 이름으로 시작됩니다. 적절한 경로를 알맞은 형식으로 입력해야합니다. 그리고 그것도 이스케이프 된 따옴표로 인용해야합니다.

행운을 빈다.

+0

이것이 사실이라면 파일 이름이 충분히 짧으면 왜 작동합니까? – astrofrog

+0

나는 대답 할 수 없다. 따옴표를 잘못 사용하면 정확히 무엇이 일어나는지 알 수 없습니다. 내 조언이 가치가 있는지 결정하는 것은 당신에게 달려 있습니다. – regulus6633

+0

나는 따옴표를 명시 적으로 이스케이프했으나 아무 것도 변경하지 않았다. - 큰 따옴표는 파이썬에서 삼중 따옴표 안에 이스케이프 할 필요가 없다 (예 :'' "hello" "" "'''''print/안녕하세요 "). – astrofrog