【问题标题】:Execute external script in ExtendScript for Illustrator在 ExtendScript for Illustrator 中执行外部脚本
【发布时间】:2015-02-08 03:00:49
【问题描述】:

总结:

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

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

【问题讨论】:

标签: python adobe-illustrator extendscript


【解决方案1】:

选项 1 (BridgeTalk)

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

以下是使用BridgeTalk 和 Adob​​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(文件.prototype.execute)

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

优点

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

缺点

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

【讨论】:

  • 这是一个有趣的提议。我要试一试,看看它是否适合我。
  • @HasecBinUsr 我已经用另一个选项更新了我的答案,以防第一个不适合你。
  • 您知道选项 1 是否真的会打开 Bridge 并假设 CS6 在某些客户端的机器上虚拟运行?此外,选项 2 似乎更通用,但无法检索外部输出,我不确定它是否非常有用。也许将参数传递给 XML 文件,如 SOAP/REST 调用,使用外部脚本读取/处理,并使用 ExtendScript 然后输入的项目目录中的响应更新 XML...
  • Adobe Bridge 将启动并对用户可见。我不确定您所说的虚拟运行 CS6 是什么意思。只要 Bridge 与 Illustrator 一起安装,它就可以工作。至于使用选项 2 来回传递数据,您的想法应该可行(特别是因为 ExtendScript 支持 XML)并且也适用于选项 1。
  • 大多数用户都有一些 CS6 组件可用作虚拟应用程序。服务器托管实际安装并通过 Citrix 接收器之类的东西提供服务。我担心的是,因为他们没有本地安装,Bridge 不会真正启动,并且命令会失败。
【解决方案2】:

Extendscript 确实支持 Socket,下面是代码 sn-p

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();
}

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多