在Illus的ExtendScript中执行外部脚本

2024-05-14 04:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

小结:

有没有一种方法可以使用execute()函数将参数传递给Python脚本,并让Python脚本在执行过程中使用该参数,然后将结果返回到ExtendScript?在

上下文: 我正在为Illustrator构建一个脚本,它必须查询web服务,处理结果XML文件,并将结果返回给用户。如果我使用一个支持套接字特性的应用程序,这将很容易,但是Illustrator不支持,我的下一个想法是,我可以用Python实现HTTP请求和XML解析。我不知道如何把两者联系起来。在


Tags: 文件方法函数用户脚本webexecute参数
2条回答

选项1(BridgeTalk)

我不得不做这样的事情来运行一个外部的PNG处理器从Photoshop和Illustrator。这两个应用程序都不能从ExtendScript执行外部程序。(参见选项2。)adobebridge的app对象有一个system方法,可以在系统shell中执行命令。使用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
  • adobebridge必须运行(如果需要,BridgeTalk会为您启动它)

方案2(文件.prototype.execute)在

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

专业人士

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

缺点

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

Extendscript不支持套接字,下面是代码片段

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

相关问题 更多 >