在ExtendScript for Illustrator中执行外部脚本

时间:2013-09-23 21:39:48

标签: python adobe-illustrator extendscript

要点:

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

上下文: 我正在为Illustrator构建一个脚本,该脚本必须查询Web服务,处理生成的XML文件,并将结果返回给用户。如果我使用其中一个支持Socket功能的应用程序,这很容易,但Illustrator却没有。我的下一个想法是,我可以在Python中实现HTTP请求和XML解析。我对如何弥合两者感到茫然。

2 个答案:

答案 0 :(得分:2)

选项1(BridgeTalk)

我不得不做这样的事情来从Photoshop和Illustrator运行外部PNG处理器。 这些应用程序都没有能力从ExtendScript执行外部程序。(参见选项2).Adobe Bridge的app对象具有system方法,可在系统中执行命令贝壳。使用BridgeTalk对象,可以从Illustrator远程调用该方法。但是,您只能获得退出代码。因此,您需要将程序的输出重定向到文件,然后在脚本中读取该文件。

以下是使用BridgeTalk和Adobe 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语法并直接将参数传递给程序

缺点

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

选项2(File.prototype.execute)

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

赞成

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

缺点

  • 无法检索退出代码
  • 不能使用shell语法或直接将参数传递给程序

答案 1 :(得分: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();
}