2017-04-19 43 views
0

我的意圖是爲Adobe Illustrator創建一個腳本,該腳本調用我用某些輸入參數編寫的已編譯的C可執行文件。無法從extensionscript .jsx文件調用可執行文件

C可執行文件(名爲'crowd-generator')將根據輸入參數生成並返回一個x,y座標數組。

據我可以從我迄今所做的研究告訴,我應該能夠執行這樣的代碼(現在忽略輸入參數):

#include crowd/crowd-generator 

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

然而,這一切似乎做它在ExtendScript中打開我的可執行文件,然後告訴我它有語法錯誤,但它絕對不會。我想也許它試圖將它作爲一個.jsx文件運行。

我曾嘗試過的一件事是給'人羣發生器'.app或.exe文件擴展名。唯一的區別是,當試圖運行我的腳本時,我得到一個對話框,詢問我可執行文件的語言是什麼......然後,無論我選擇什麼,它都會給我一個語法錯誤。

什麼問題?有沒有辦法從Adobe Illustrator中運行的.jsx文件運行此可執行文件?

+0

你在windows上還是在macOS上? – fabianmoronzirfas

+0

嗨!我正在使用OSX – Martha

回答

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

現在我只需要弄清楚如何使用參數進行可執行調用,並獲得結果。

+1

關於傳遞參數並獲取返回值,你可以在這裏閱讀http://stackoverflow.com/questions/42863672/passing-the-result-of-a-python-script-to-an-extendscript-jsx -file/42873262#42873262 – emax

+0

@emax謝謝,非常有幫助。我想我已經決定爲了這個項目而另闢蹊徑,因爲其他原因,但這是非常好的知識,而且很難在網上找到。 – Martha

2

是什麼意思行?:

#include crowd/crowd-generator 

事實上,你想包括executible代碼到JSX文件,這是錯誤。

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執行它。


問題在於獲取返回值。