如何用Appscript和Python将文件列表传入应用程序?
准备好迎接挑战吧,我要给你们带来一些新知识。
我正在尝试用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...