如何用Appscript和Python将文件列表传入应用程序?

1 投票
1 回答
510 浏览
提问于 2025-04-15 17:03

准备好迎接挑战吧,我要给你们带来一些新知识。
我正在尝试用AppScript和Python让Photoshop CS4打开一整文件夹的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处理。
用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())

嗯,解决了这个问题后,有没有办法通过指定一个 UNIX路径 来请求Finder列出某个文件夹里的文件呢?

1 个回答

3

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

撰写回答