Input von Automator zu AppleScript

eagleeyeMS

Neues Mitglied
Thread Starter
Dabei seit
06.11.2009
Beiträge
15
Reaktionspunkte
0
Wenn ich im Automator ein AppleScript ausführe, dann erscheint ein standart Grundgerüst mit den Variablen input und parameters.
Meine Frage nun dazu, Wie genau schaut der Input aus? Mein Skript sieht folgendermassen aus:

Code:
on run {input, parameters}
	
	tell application "TextWrangler"
		if input = 0 then
			open "/Users/.../Desktop/helloKitty.html"
		else
			open "/Users/.../Desktop/helloWorld.html"
		end if
	end tell
	
	return input
end run

Leider funktioniert das nicht, auch wenn von der vorhergehenden Ausführung keinen input kommt. was muss nun also nach dem = bei if stehen, damit es funktioniert? bzw. wie müsste ich es schreiben, wenn input eine bestimmte Datei ist, und ich abfragen will, ob diese Datei gefunden wurde?
 
Input bezieht sich immer auf das Resultat der vorhergegangenen Automatoraktion.
Wenn Du z.B. vorher im Finder eine Gruppe von Files ausgewählt hast, ist Input eine Liste von Filereferenzen, die Du mit dem Applescript bearbeiten kannst.
Wenn Du, wie varuna richtig ausgeführt hat, eine leere Liste {} übergibst, bedeutet das, daß Input nicht existiert.

Ciao
Farid
 
Zuletzt bearbeitet:
und wie sieht es aus wenn als Ergebnis der vorherigen Aufgabe
Code:
(
 "/Users/Shared/html/helloWorld.html"
)
steht? Wie frage ich, ob er diese Datei als input weitergereicht hat?

Code:
if input is {"/Users/Shared/html/helloWorld.html"}
funktioniert irgendwie nicht... und auch Varianten wie
Code:
if input is {("/Users/Shared/html/helloWorld.html")}
funktionieren nicht. :rolleyes:
 
Sorry für die falsche Ausdrucksweise, der Textstring in dem der Pfad zur Datei steht...
Fakt ist, dass input anscheinend nicht das ist, was es im Ergebnis vorher ausgibt.

Ergebnis vorherige Abfrage im Automator:
Code:
(
 "/Users/Shared/Touchscreen/Touchscreen.key"
)

gesamtes Skript:
Code:
on run {input, parameters}

tell application "Keynote"
if input is {"/Users/Shared/Touchscreen/Touchscreen.key"} then
open "/Volumes/Macintosh HD/Users/Shared/Touchscreen/Touchscreen.key"
else
open "/Volumes/Macintosh HD/Users/Shared/Touchscreen/Admin/maintenance.key"
end if
activate
end tell

return input

Im Momment wird allerdings ständig maintenance.key geöffnet auch wenn die Datei Touchscreen.key gefunden wird.

Versteh ich nicht...
 
Ergebnis vorherige Abfrage im Automator:
(...)
Was ist denn der vorhergehende Schritt im Automatorablauf und was für ein Datentyp (File, Liste, Folder, Text ...) wird an das Script weitergereicht ?

PS: Ich staune, daß diese Zeile eine Datei öffnet:
open "/Volumes/Macintosh HD/Users/Shared/Touchscreen/Admin/maintenance.key"
Ist das Snow Leopard ?

Ciao
Farid
 
Fakt ist, dass input anscheinend nicht das ist, was es im Ergebnis vorher ausgibt.

Jein!
Wenn Du dein Workflow laufen lässt und dir das Ergebnis anschaust, welches deine AppleScript Aktion zurückgibt, wirst Du sehen, dass der input (den Du mit deinem Skript ja am Ende wieder ausgibst) tatsächlich gewandelt wird. Und zwar in einen (kompatiblen) AppleScript-Pfad (damit dein AppleScript auch damit umgehen kann)

Automator Aktionen akzeptieren UNIX und AppleSkript Pfade, wandeln diese aber je nach Bedarf um.

Fange dein Skript doch so an:

Code:
 on run {input, parameters}
	
set searchMe to POSIX path of input
tell application "Keynote"
if searchMe is "/Users/Shared/Touchscreen/Touchscreen.key" then
 
Was ist denn der vorhergehende Schritt im Automatorablauf und was für ein Datentyp (File, Liste, Folder, Text ...) wird an das Script weitergereicht ?

Finder-Objekte suchen
Name -> ist -> Touchscreen.key


Wenn Du dein Workflow laufen lässt und dir das Ergebnis anschaust, welches deine AppleScript Aktion zurückgibt, wirst Du sehen, dass der input (den Du mit deinem Skript ja am Ende wieder ausgibst) tatsächlich gewandelt wird. Und zwar in einen (kompatiblen) AppleScript-Pfad (damit dein AppleScript auch damit umgehen kann)

Stimmt, ist mir nie bewusst aufgefallen.

Fange dein Skript doch so an:

Code:
 on run {input, parameters}
	
set searchMe to POSIX path of input
tell application "Keynote"
if searchMe is "/Users/Shared/Touchscreen/Touchscreen.key" then

Funktioniert solange die Datei Touchscreen.key gefunden wird. Ist diese nicht vorhanden, ist das Ergebnis leer und POSIX path ergibt einen Fehler ("POSIX path" kann nicht gelesen werden) und das Skript wird nicht zu Ende ausgeführt. Soll heissen, if wird zwar jetzt korrekt ausgeführt, zum else wird's aber nie kommen.

Gibt es denn nicht schon viele Fälle in denen man input in diesem Stil weiterverwendete? Ich bin immer noch der Meinung, dass es eine simple Lösung gäbe, auf die ich (wir?) einfach nicht kommen...

EDIT:

Es funktioniert nun. Keine Ahnung wieso, aber es läuft:

Code:
on run {input, parameters}

tell application "Keynote"
 if input is {} then
  open"...."
 else
  set searchMe to POSIX path of input
  if searchMe is "..." then
   open "..."
  end if
 end if
 activate
end tell
return input

aber eigentlich könnte ich das zweite if weg lassen, da durch die Suche vorher eigentlich die Datei entweder gefunden wird oder nicht. Aber so hats nicht funktioniert. Schlussendlich will ich aber keinen Schönheitspreis gewinnen daher reicht mir dieses Ergebnis.
Danke für eure Unterstützung.
 
Zuletzt bearbeitet:
Zurück
Oben Unten