如何使用appscript和Python将文件列表提供到应用程序中?

时间:2009-12-15 18:09:06

标签: python macos applescript finder appscript

拿起你的新盾,我准备给你洒一些 我试图让Photoshop CS4用AppScript + Python打开一堆JPEG图像,这可以在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为我列出一个文件夹,并将结果一次一个地输入Photoshop进行处理。
与Adobe的ExtendScript桥相当的JavaScript将是:

#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: 1230MESSAGE: File/Folder expected

(呃 - 哦,这个document_file实际上会回复URL(),因此File.makewithurl(x.URL())可以投放到open()

嗯,解决了这个问题后,有没有办法通过向Finder询问由 UNIX路径指定的给定文件夹中的文件列表来实际执行此操作?

1 个答案:

答案 0 :(得分:3)

Photoshop的open命令需要别名对象(或别名对象列表)。

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...