Как подать список файлов в приложение с помощью appscript и Python? - PullRequest
1 голос
/ 15 декабря 2009

Подними свои щиты для новичков, я собираюсь немного их окропить.
Я пытаюсь заставить Photoshop CS4 открыть папку изображений JPEG с помощью AppScript + Python, что можно описать примерно так в BASH:

#!/bin/bash
for F in `ls ~/Desktop/test`; do
    open -a "Adobe Photoshop CS4" $F
    # proceed to mutilate the image appearance
done

Я терплю неудачу на стадии ls ~/Desktop/test. Я действительно хотел бы попросить, чтобы Finder перечислил папку для меня и передавал результат в Фотошоп по одному, чтобы обработать их.
Эквивалент JavaScript с мостом Adobe ExtendScript будет:

#target photoshop
var folder = Folder("~/Desktop/test");
var images = folder.getFiles();
for (var i=0; i < images.length; i++) {
    if (images[i] instanceof File && images[i].hidden == false) {
        var doc = app.open(images[i]);
        // do something to the image here
        doc.close(SaveOptions.DONOTSAVECHANGES);
    }
}

Я могу достать мне document_file объект с ужасно глупой штуковиной, такой как x = app('Finder').home.folders['Desktop']().folders['test']().items()[0], но это оказывается действительно глупым объектом. Попытка app('Adobe Photoshop CS4').open(x) этого объекта вызовет OSERROR: 1230, с MESSAGE: File/Folder expected.

(О-о, этот document_file на самом деле реагирует на URL(), поэтому File.makewithurl(x.URL()) можно вводить в open())

Эх, решив это, есть ли способ сделать это, запросив у Finder список файлов в данной папке, указанный UNIX-путь ?

1 Ответ

3 голосов
/ 15 декабря 2009

Для команды открытия Photoshop требуется объект псевдонима (или список объектов псевдонимов).

from appscript import *

folder = '/path/to/folder'

ps = app('Adobe Photoshop CS4')

for f in app('Finder').items[mactypes.Alias(folder)].files.get(resulttype=k.alias):
    ps.open(f)
    # do stuff here...
...