Flytta variablars värde mellan olika skript

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Hej

Jag tackar för tidigare hjälp via detta forum...

Nu funderar jag på följande:

Går det att:
(1) i Skript_A skapa ett värde i Variabel_A
(2) skicka värdet till Skript_B
(3) Skript_B skapar i sin tur ett värde i Variabel_B
(4) vars värde skickas tillbaka till Skript_A?

Mitt mål är att Photoshop CS2 och FileMaker ska börjar "prata" med varandra...

Funderingar från
Erland Segerstedt, Kusmark

  • Medlem
  • Vallentuna
  • 2006-08-16 21:18

Enklast är väl att göra ett enda script. Varför behöver du två? Ett enda AppleScript kan innehålla kommandon till flera olika program.

Om man behöver flera script så skulle man kunna använda typ

do shell script "osascript andrascriptet.scpt \"argumentet\""

och i andra scriptet fånga upp det med typ

on run argv
  set argumentet to item 1 of argv
end run

Jag har använt AppleScript en del på sistone, men har inte lärt mig det ordentligt (maken till äckligt språk!), så det här är säkert inte bästa/enda sättet.

Visst. Alla de saker du frågar efter går utmärkt. De kommandon du ska titta efter finns i Standard Additions, och heter Load Script, Store Script och Run Script. De är användbara i olika sammanhang och ibland kan det ena eller andra vara att föredra

Skripta Photoshop

Hej

Nu funderar jag på varför en bildfil sparad via denna kod:

------------ kod -----------------
tell application "Adobe Photoshop CS2"
set bildNamn to the name of current document
end tell
set bildNr to "12375.tif" as text
tell application "Adobe Photoshop CS2"
activate
tell current document
save in file bildNr as TIFF
end tell
end tell
------------ slut kod -----------------

landar i Photoshops-programikonens egen "contents"-mapp?

(sökvägen -->Program:Photoshop CS2:Photoshop CS2:Contents:MacOS)

Tack på förhand för info

Hälsningar
Erland Segerstedt, Kusmark

Lägg till detta först i manuset, dvs före tell application "Adobe Phtosohop CS"

-- Denna snutt styr var det hela skall sparas
tell application "Finder"
-- Lagra sökvägen till skrivbordet. Ex: "Wolverine:Users:Ola:Desktop:"
set pathstart to path to desktop folder as text

-- Lägg till namnet på mappen på skrivbordet som du vill spara i. Mappen måste finnas där.
set pathstart to pathstart & "Nya bilder:"

-- I pathstart finns nu tex: "Wolverine:Users:Ola:Desktop:Nya bilder:"
end tell

Ändra även denna rad:

save in file bildNr as TIFF

...till:

save in file (pathstart & bildNr) as TIFF

Du kan även ta bort det första end tell och det andra tell application "Adobe Photoshop CS2" och flytta på activate så det står först. Anledningen till det är att du inte behöver skriva ut tell application när du redan håller på och "säger" saker till den så att säga.

Äh, ok, så här skall det hela se ut när det är klart....

-- Denna snutt styr var det hela skall sparas
tell application "Finder"
-- Lagra sökvägen till skrivbordet. Ex: "Wolverine:Users:Ola:Desktop:"
set pathstart to path to desktop folder as text

-- Lägg till namnet på mappen på skrivbordet som du vill spara i. Mappen måste finnas där.
set pathstart to pathstart & "Nya bilder:"

-- I pathstart finns nu tex: "Wolverine:Users:Ola:Desktop:Nya bilder:"
end tell

tell application "Adobe Photoshop CS2"
activate
set bildNamn to the name of current document
set bildNr to "12375.tif" as text
tell current document
save in file bildNr as TIFF
end tell
end tell

Jag har inte Adobe Photoshop CS så jag kan inte kompilera detta, men det bör fungera.

Lycka till!

Sedan är det jättekul att bygga lösningar där FileMaker Pro och Adobe-programmen pratar med varandra. Det fungerar mycket bra.

När det gäller dina frågor så håller jag med om att man kan göra sakerna man vill i samma script istället för flera, detta är ett exempel på handlers, att ett manus delas upp i delar. När manuset startar så letar Applescript efter en on run-handler och kör den först.

on run
-- När manuset startar görs allt mellan on run och end run.

-- Här lagrar vi en variabel:
set A to "Mae West"

-- Här skickar vi den variabeln till en subrutin
set B to getQuotesof(A)

-- Visa resultatet
B

end run

-- Applescript kommer aldrig hit om man inte "ropar" på funktionen getQuotesofA, prova att kommentera ut några rader ovan så ser du det.
on getQuotesof(A)

if A = "Mae West" then
set A to "Is that a pistol in your pocket or are you happy to see me?"
end if

end getQuotesof

Du kan även spara manus som applikationer och skicka parametrar från en till en annan, om jag skapar ett manus med följande innehåll

on sing(timesToSing)
beep timesToSing
end sing

... sparar det som ett program som heter "Sing My Friend.app" så kan jag sedan från ett annat manus ropa på det genom att skriva:

tell application "Sing My Friend.app"
sing(3)
end tell

Men det är inte nödvändigt att göra så för att få tex FileMaker och Photoshop att prata med varandra. Det är istället det man har Tell application-kommandot till, som också är en handler. Mellan tell och end tell så skickar Applescript kommadona som står där till det program man har angett. Om man sedan helt enkelt avslutar med end tell och istället vänder sig till ett nytt program med en ny tell application X så är det det nya programmet som tar emot alla kommandon.

Exempel: Jag vill hämta en URL ur ett fält i FileMaker och sedan öppna den i Safari och sedan kopiera all text, sedan vill jag spara texten i en textfil i Textredigeraren på skrivbordet.

tell application "FileMaker"
-- Här skall kod för att aktivera FileMaker, öppna en databas och leta rätt på en viss post stå, men jag har utelämnat det.
set URLtoOpen to cell "URL" of current record
end tell

tell application "Safari"
	activate
	
	-- Öppna nytt dokument, lagra referens till det och öppna en viss URL i det nya dokumentet.
	set docRef to make document
	set URL of docRef to URLtoOpen
	
	-- När sidan har laddats så fungerar inte docRef-referens längre då dokumentet får ett nytt namn, så vi måste läsa av det varje gång.
	
	-- Vi måste vänta en stund så sidan hinner laddas.
	repeat 20 times
		try
			-- Vad heter dokumentet nu?
			set docRef to document 1
			
			-- Vi försöker läsa av texten i dokumentet.
			set allTextofPage to the text of docRef
			
			-- Om texten är en tom sträng, så är Safari inte klar med att ladda in sidan.
			if allTextofPage is not "" then
				-- Men om man kommer hit så är texten mer, så vi lämnar repeaten.
				exit repeat
			end if
			
		on error -- Sidan har inte laddat klart
			delay 3 -- vänta 3 sekunder och prova igen
		end try
		
	end repeat
	
end tell

(* Jo, man kan spara sidan direkt från Safari men min pedagogiska poäng framgår inte om jag inte gör så här istället... *)


tell application "TextEdit"
	activate
	set docRef to make new document
	
	-- Stoppa in Safarisidan i detta dokument
	set text of docRef to allTextofPage
	
	-- Spara sidan
	-- Denna snutt styr var det hela skall sparas
	tell application "Finder"
		-- Lagra sökvägen till skrivbordet. Ex: "Wolverine:Users:Ola:Desktop:"
		set pathstart to path to desktop folder as text
		
		-- Lägg till namnet på mappen på skrivbordet som du vill spara i. Mappen måste finnas där.
		set pathstart to pathstart & "Safarisidor:"
		
		-- I pathstart finns nu tex: "Wolverine:Users:Ola:Desktop:Safarisidor:"
	end tell
	
	-- Nu är vi tillbaka i TextEdit igen, 
	-- Skapa sökväg med filnamn.	
	set pathtosave to pathstart & "Safaridokument.txt"
	
	-- Stäng dokumentet och spara det.
	close document 1 saving in pathtosave saving ask
	
end tell

Så genom att använda tell application X och activate (när det behövs) så kan man hoppa mellan program och använda samma data lagrade i variabler i olika program.

Erland har startat en ny tråd från och med hans inlägg 4 och kommenterar i den mitt inlägg nr 5 i denna tråd.

Här är nya tråden:
http://www.99mac.se/applescript/102812-skripta-photoshop-cs2.html

Så Erland, om du hade någon nytta av mina inlägg 5, 6 och 7 kan du ju kanske skriva det?

Svar till Taz_1999

Min okunskap om hur detta forum tekniskt fungerar - ställde till det lite för mig. Fr o m inlägg nr 4 var det min mening att starta en ny tråd. Därav "splittringen" av frågan till en ny tråd...
Ber om överseende för detta.

De svar jag fått/får på mina frågor är för mig en stor hjälp; och framför allt - en aldrig sinande källa för ökad kunskap om konsten att skripta Macen.

Dina inlägg nr 6 och 7 kommer till nytta senare i mitt vidare arbete med bildflödet.

För detta tackar jag

Hälsningar
Erland Segeerstedt, Kusmark

1
Bevaka tråden