2017-04-19 57 views
0

私は、いくつかの入力パラメータで書き込んだコンパイル済みのC実行ファイルを呼び出すAdobe Illustrator用のスクリプトを作成します。extendscriptの.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ファイルとして実行しようとしていると思います。

私が試したことは、「crowd-generator」に.appまたは.exeファイル拡張子を付けることです。これが唯一の違いは、スクリプトを実行しようとすると、実行可能ファイルがどの言語にあるかを尋ねるダイアログボックスが表示され、それが選択した文法エラーです。

何が問題になりますか? Adobe Illustratorで実行される.jsxファイルからこの実行可能ファイルを実行する方法はありますか?

+0

窓やMacOSにいますか? – fabianmoronzirfas

+0

こんにちは!私はOSXを使用しています – Martha

答えて

0

この質問を投稿して以来、私はいくつかの進歩を遂げ、自分の答えを投稿することに決めました。

私のコードには2つの問題があります。

は、EMAXが正しく自分の答えで指摘したように、私は誤ってラインで実行可能ファイルを含めるようにしようとしていた最初:

#include crowd/crowd-generator 

削除この行では、コードがまだ動作しませんでした - I ExtendScriptのファイルオブジェクトではなく、相対的な1

ので

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

argsを渡し、リターン値を取得することについては、こちらを参照してください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 

を何を意味し、あなたが、これは誤りで、JSXファイルにexecutibleコードを含めるようにしようとしています。

0

不幸にも、Illustratorは、InDesigns app.doScriptやAfter Effects のような素晴らしい機能を持っていません。

macOSでコマンドを実行する1つの方法は、用語ファイルを作成することです。

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

もう一つの方法は、コマンドファイルを作成しています。これは実行ファイル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(); 
    

    はイラストレーターからそれを実行します。

これはその内容でなければなりません。


問題は戻り値を取得することです。

関連する問題