我的目的是为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文件运行此可执行文件?
答案 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.command
,ls
足以用于测试目的。 它应该是这样的:
#!/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对象需要一个绝对文件路径而不是一个相对的
所以 - 我更正后的代码看起来像这样:
var script_file = new File('/Applications/Adobe Illustrator CC 2015.3/Presets.localized/en_GB/Scripts/crowd/crowd-generator');
var result = script_file.execute();
现在我只需要弄清楚如何使用参数进行可执行调用,并获得结果。