无法从extendscript .jsx文件调用可执行文件

时间:2017-04-19 10:52:27

标签: adobe extendscript

我的目的是为Adobe Illustrator创建一个脚本,该脚本调用我用一些输入参数编写的已编译C可执行文件。

C可执行文件(名为'crowd-generator')将根据输入参数生成并返回x,y坐标数组。

据我迄今为止所做的研究可以看出,我应该能够像这样执行代码(暂时忽略输入参数):

#include crowd/crowd-generator

var script_file = new File('crowd/crowd-generator');
var result = script_file.execute();

然而,所有这些似乎都是为了在ExtendScript中打开我的可执行文件然后告诉我它有语法错误,它肯定没有。我想也许它试图将它作为.jsx文件运行。

我尝试过的一件事是给'crowd-generator'一个.app或.exe文件扩展名。这样做的唯一区别是,当我尝试运行我的脚本时,我会看到一个对话框,询问可执行文件所使用的语言...然后无论我选择什么,它都会给我一个语法错误。

出了什么问题?有没有办法从Adobe Illustrator中运行的.jsx文件运行此可执行文件?

3 个答案:

答案 0 :(得分:2)

这条线是什么意思?:

  #include crowd/crowd-generator

实际上,您正在尝试将可执行代码包含到jsx文件中,这是错误。

答案 1 :(得分:0)

不幸的是,Illustrator没有InDesigns app.doScript或After Effects system.callSystem等功能。

在macOS上执行命令的一种方法是创建术语文件。

/* global $, app, File */
/**
 * Read about termfiles
 * http://docstore.mik.ua/orelly/unix3/mac/ch01_03.htm
 * 1.3.1.1. .term files
 */

var termfile = new File(File($.fileName).parent.fsName + '/command.term');
var command = 'cd ' + File($.fileName).parent.fsName + ' ; ls';
termfile.open('w');

termfile.writeln(
    '<?xml version="1.0" encoding="UTF-8"?>\n' +
        '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"' +
            '"http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n' +
            '<plist version="1.0">\n' +
                '<dict>\n' +
                    '<key>WindowSettings</key>\n' +
                '<array>\n' +
                ' <dict>\n' +
                '<key>CustomTitle</key>\n' +
                '<string>My first termfile</string>\n' +
                '<key>ExecutionString</key>\n' +
                '<string>' + command + '</string>\n' +
                '</dict>\n' +
                '</array>\n' +
                '</dict>\n' +
            '</plist>\n');

termfile.close();
termfile.execute();

另一种方法是创建命令文件。这只是一个shell脚本,您可以创建可执行文件chmod +x myScript.command,然后您也可以使用execute命令调用它。

  • 使用简单的命令创建文件myScript.commandls足以用于测试目的。

它应该是这样的:

#!/bin/bash
ls
  • 打开终端并导航到脚本所在的文件夹。
  • 通过运行chmod +x myScript.command
  • 使其可执行
  • 创建在其旁边执行它的脚本。

这应该是它的内容:

var commandFile = File(File($.fileName).parent.fsName + '/myScript.command');
commandFile.execute();

从Illustrator执行。

问题是获取返回值。

答案 2 :(得分:0)

自发布此问题以来,我取得了一些进展,并决定发布我的答案。

我的代码有两个问题。

第一个,正如emax在答案中正确指出的那样,我错误地试图将可执行文件包含在以下行中:

#include crowd/crowd-generator

删除了这一行后,代码仍然无法正常工作 - 之后我意识到这是因为ExtendScript FILE对象需要一个绝对文件路径而不是一个相对的

source

所以 - 我更正后的代码看起来像这样:

var script_file = new File('/Applications/Adobe Illustrator CC 2015.3/Presets.localized/en_GB/Scripts/crowd/crowd-generator');
var result = script_file.execute();

现在我只需要弄清楚如何使用参数进行可执行调用,并获得结果。

相关问题