1

概括:

有没有办法使用 execute() 函数将参数传递给 Python 脚本,并让 Python 脚本在执行时使用该参数,然后将结果返回给 ExtendScript?

上下文:我正在为 Illustrator 构建一个脚本,该脚本必须查询 Web 服务、处理生成的 XML 文件并将结果返回给用户。如果我使用支持 Socket 功能的应用程序之一,这将很容易,但 Illustrator 不支持。我的下一个想法是,我可以在 Python 中实现 HTTP 请求和 XML 解析。我不知道如何在两者之间架起桥梁。

4

2 回答 2

3

选项 1(桥话)

我必须这样做才能从 Photoshop 和 Illustrator 运行外部 PNG 处理器。这些应用程序都不能从 ExtendScript 执行外部程序。(请参阅选项 2。)Adobe Bridge 的app对象具有system在系统 shell 中执行命令的方法。使用BridgeTalk对象,您可以从 Illustrator 远程调用该方法。不过,您只会得到退出代码作为回报。因此,您需要将程序的输出重定向到一个文件,然后在脚本中读取该文件。

下面是一个使用BridgeTalkAdob​​e Bridge 运行外部程序的示例:

var bt = new BridgeTalk();
bt.target = 'bridge';
bt.body = 'app.system("ping -c 1 google.com")';
bt.onResult = function (result) {
    $.writeln(result.body);
};
bt.send();

优点

  • 异步
  • 可以轻松检索退出代码
  • 可以使用shell语法并直接将参数传递给程序

缺点

  • 必须安装 Adob​​e Bridge
  • Adobe Bridge 必须正在运行(但如果需要,BridgeTalk 会为您启动它)

选项 2 (File.prototype.execute)

我后来发现了这一点,不敢相信我错过了。该类File具有execute打开或执行文件的实例方法。它可能适用于您的目的,尽管我自己没有尝试过。

优点

  • 异步
  • 内置于每个 ExtendScript 环境中(无进程间通信)

缺点

  • 无法检索退出代码
  • 无法使用 shell 语法或直接将参数传递给程序
于 2014-01-29T22:48:00.427 回答
0

Extendscript 确实支持 Socket,下面是代码片段

reply = "";
conn = new Socket;
// access Adobe’s home page
if (conn.open ("www.adobe.com:80")) {
// send a HTTP GET request
conn.write ("GET /index.html HTTP/1.0\n\n");
// and read the server’s reply
reply = conn.read(999999);
conn.close();
}
于 2015-02-07T19:00:49.260 回答