[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

mdomino
Beiträge gesamt: 76

18. Nov 2015, 04:30
Beitrag # 1 von 8
Bewertung:
(3414 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Scripter,

ich bin hier bald vollkommen frustriert, weil mal wieder überhaupt nichts funktionieren will. Vielleicht hat hier einer die rettende Idee.

Ich möchte schlicht und einfach ein appleScript.scpt mittels app.doScript() ausführen. Wenn ich das Script ausführe ohne Argumente funktioniert das auch einwandfrei. Wenn ich jedoch als dritten Parameter versuche Argumente zu übergeben, tritt ein Fehler auf.

Hier ist mein aufs simpelste reduzierte Setup:
Code
var myArgArray = ["arg1", "arg2"]; 
var appleScript = File('~/mein/Pfad/appleScript.scpt');

app.doScript(appleScript, ScriptLanguage.applescriptLanguage, myArgArray);



Die Fehlermeldung, die mir ausgegeben wird, lautet folgendermaßen:

Code
„arguments of «handler run»“ kann nicht als „{"arg1", "arg2"}“ gesetzt werden. (-10006) 


Ist irgendwie mein Array falsch formatiert?
Ist das schon mal bei jemandem aufgetreten?

Wäre über Hilfe sehr dankbar!

Viele Grüße, MD
X

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

Martin Fischer
  
Beiträge gesamt: 12783

18. Nov 2015, 10:58
Beitrag # 2 von 8
Beitrag ID: #544699
Bewertung:
(3365 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MD,

wie werden Deine Argumente im AppleScript aufgenommen?

Hier ein einfaches Beispiel für den Aufruf eines Applescripts mit doScript() mit Argumenten:

Code
var myArgArray = ["arg1", "arg2"]; 
var myAppleScript = "display dialog(\"Erstes Argument: \" & item 1 of arguments & return & \"Zweites Argument: \" & item 2 of arguments)";
app.doScript(myAppleScript, ScriptLanguage.applescriptLanguage, myArgArray);



als Antwort auf: [#544696]

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

mdomino
Beiträge gesamt: 76

18. Nov 2015, 11:50
Beitrag # 3 von 8
Beitrag ID: #544702
Bewertung:
(3348 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
danke zunächst für deine Antwort.
Das von dir gezeigte Beispiel funktioniert tatsächlich.

Wenn ich das Ganze allerdings als "externe" Apple-Script-Datei einbinde, bekomme ich den gleichen Fehler wie zuvor.

Mein Extend-Script-Code bleibt also gleich und mein Apple Script Code lautet dann schlicht:

Code
display dialog("Erstes Argument: " & item 1 of arguments & return & "Zweites Argument: " & item 2 of arguments) 


Alternativ habe ich versucht erst mal nur die Argumente entgegenzunehmen:

Code
set arg1 to item 1 of arguments 
set arg2 to item 2 of arguments

display dialog("Erstes Argument: " & arg1 & return & "Zweites Argument: " & arg2)


Das hat beides nicht funktioniert, die Fehlermeldung ist abermals

Code
„arguments of «handler run»“ kann nicht als „{"arg1", "arg2"}“ gesetzt werden. (-10006) 


Ist die Übergabe von Argumenten demnach nur möglich, wenn ich das gesamte Script als Stringvariable an app.doScript() übergebe?


Danke und Grüße, MD


als Antwort auf: [#544699]

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

Martin Fischer
  
Beiträge gesamt: 12783

18. Nov 2015, 12:15
Beitrag # 4 von 8
Beitrag ID: #544703
Bewertung:
(3338 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MD,

wie hast Du das AppleScript gespeichert?
Nur als reine TXT-Datei?
Damit kann ich Deinen Fehler nachstellen.

Oder über den AppleScript-Editor im Skript-Format (s. Anhang)?
Damit funktioniert es bei mir.


Alternativ – falls Du das AppleScript nicht im Skript-Format sichern kannst – sollte es möglich sein, den Inhalt der Textdatei auszulesen, Anführungszeichen und RETURNs (und vielleicht noch Anderes) zu escapen und dann als String dem doScript()-Befehl zu übergeben.


als Antwort auf: [#544702]
(Dieser Beitrag wurde von Martin Fischer am 18. Nov 2015, 12:23 geändert)

Anhang:
appleScript.scpt (0.89 KB)

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

mdomino
Beiträge gesamt: 76

18. Nov 2015, 13:26
Beitrag # 5 von 8
Beitrag ID: #544707
Bewertung:
(3305 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oha, ich glaube damit hast du ins Schwarze getroffen.

Habe das Script im Sublime Texteditor erstellt, natürlich mit .scpt-Datei-Endung und auch schön AppleScript-Syntax-Hightlighting, und das hat mich zur Annahme verleitet, dass es sich um ein reguläres AppleScript handelt. (Zumal es ja ohne Argumente tatsächlich funktioniert hat.)

Es scheint aber tatsächlich eine verkappte Text-Datei mit .scpt-Endung zu sein, denn wenn ich deine appleScript-Datei in Sublime öffne sehe ich nur "Binärcode" (keine Ahnung, ob man das so nennt).

Wenn ich mein Script jetzt noch mal im AppleScript-Editor erstelle funktioniert es tatsächlich.

Vielen, vielen Dank, du hast mir den Tag gerettet! :)

Grüße, MDomino


als Antwort auf: [#544703]

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

mdomino
Beiträge gesamt: 76

18. Nov 2015, 15:07
Beitrag # 6 von 8
Beitrag ID: #544711
Bewertung:
(3266 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und wo ich gerade schon mal einen Experten an der Angel habe würde ich gerne noch eine damit verbundene Frage nachschieben.

Was ich nämlich eigentlich versuche ist, dass ich ein Python-Script aus InDesign heraus ausführe. Das habe ich jetzt halt über den Weg InDesign -> AppleScript -> Python gemacht.

Da gibt es nicht zufällig einen eleganteren Weg, den ich hier übersehe? Ich komme mir nämlich schon ein wenig bekloppt vor, ich übergebe Argumente an ein AppleScript, nur damit dieses dann die Argumente an ein Python-Script weitergeben kann. ;)

Das Prinzip funktioniert jetzt jedenfalls, aber falls es da einen direkteren und somit eleganteren Weg gäbe, hätte ich da natürlich auch nichts gegen.

Danke und Grüße, MD


als Antwort auf: [#544707]

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

Martin Fischer
  
Beiträge gesamt: 12783

18. Nov 2015, 15:37
Beitrag # 7 von 8
Beitrag ID: #544714
Bewertung:
(3257 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MD,

Antwort auf: Was ich nämlich eigentlich versuche ist, dass ich ein Python-Script aus InDesign heraus ausführe. Das habe ich jetzt halt über den Weg InDesign -> AppleScript -> Python gemacht.


Das kenne ich gut.
Habe so etwas Ähnliches mal wg. Shell-Kommandos konstruiert.
Ein JavaScript, das ein AppleScript mit einem Shell-Skript ausführt.
Das gibt bisweilen einen harten K(r)ampf mit Anführungs- und Escape-Zeichen. ;-)

Ich fürchte, es gibt keinen einfacheren Weg.

Aber vielleicht kennt jemand Anderer noch eine elegantere Lösung.


als Antwort auf: [#544711]

Wie kann ich mittels app.doScript() ein AppleScript *mit* Argumenten ausführen?

mdomino
Beiträge gesamt: 76

18. Nov 2015, 16:18
Beitrag # 8 von 8
Beitrag ID: #544718
Bewertung:
(3232 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Das gibt bisweilen einen harten K(r)ampf mit Anführungs- und Escape-Zeichen. ;-)


Deshalb wollt ich erreichen, dass ich das AppleScript als Datei aufrufen kann und nicht als String, damit dieser K(r)ampf erst in der AppleScript-Datei selbst losgeht und nicht schon in JavaScript. ;-)

Vielleicht noch ein weiteres "unkonventionelles" Detail meines Workflows:
Ich habe vor zu überprüfen, ob die Python-Datei fertig gelaufen ist, indem ich am Ende des Python-Scripts eine leere Textdatei "end.txt" rausschreibe und den JavaScript-Teil währenddessen in eine while-Schleife schicke, die so lange läuft, bis sie diese "end.txt"-Datei vorfindet (oder ein TimeOut-Limit erreicht wird). Wenn da noch jemandem etwas Eleganteres einfällt, bin ich ganz Ohr. :-D


als Antwort auf: [#544714]
X