Starta script automatiskt?

Tråden skapades och har fått 20 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Trollhättan
  • 2008-06-12 22:09

Hej!!!

Sitter för första gången med Automator och har gjort ett trevligt litet script som funkar finfint
Nu saknas det bara en liten grej, jag vill att mitt script ska starta automatiskt när en fil hamnar i en viss mapp t.ex. om jag drar en fil till mappen så sätts mitt script från Automator igång av sig självt utan att jag måste klicka igång det.

Någon som kan tipsa hur man ska gå till väga?

Mvh Eivind

  • Medlem
  • Linköping
  • 2008-06-12 22:27

Du kan ju använda "folder actions". Aktivera och lägg till via högerklicksmenyn i finder.

  • Medlem
  • Trollhättan
  • 2008-06-13 17:59

thanx funka fint!

men fick ett nytt problem, tanken är att filerna kommer in som ett flöde och blir skickade
en och en via ftp. scriptet visar error när nästa fil kommer. förmodligen för att scriptet inte är färdigt med den första filen, går det att skapa något kö system??? så att det automatiskt tar nästa fil när den är klar med den första?

Det kan finnas flera lösningar på problemet, tex kan man kolla om programmet du skickar filer med är klart eller inte. Man kan även koda wait-statements och try-statements. Då får berätta mera om ditt script, vilket program det talar mm osv.

Mitt inlägg är nr 10. Det är ett Applescript för att skicka filer via FTP.

http://www.99.se/mac-os-x/91820-mapp-ftp-ar-g-r-det.html

  • Medlem
  • Stockholm
  • 2008-06-14 17:56

Kan ett system med två mappar vara enklare?

Ide: filerna läggs i första mappen, hämtas av skriptet för behandling till andra mappen som aldrig innehåller mer än en fil varför det nuvarande problemet aldrig uppstår. Skriptkoden måste då innehålla, att efter varje fil är färdigbehandlad och ivägsänd kontrollerar skriptet antal filer i den första mappen - samt för över vad som då räknas som fil nr 1 i första mappen, till andra mappen för behandling.

Antagligen är det med den lösningen enklast att starta skriptet manuellt med ett skript-alias placerat i dockan - när en fil läggs i första mappen går det lätt att kolla i dockan om skriptet är igång eller ej. Alternativet skulle kunna vara att en 'Folder Action' kan startas av den första filen i mapp nr 1 - filen förs till mapp nr 2 endast om denna är tom, annars väntar skriptet med filöverföringen (med reservation för att jag är 'Applescriptare' och inte känner till Automators begränsningar). Ett till alternativ, och antagligen det snyggaste: en 'Folder Action' i mapp nr 1 matar filer till mapp nr 2 om denna är tom. Mapp nr 2 har i sin tur en 'Folder Action' som behandlar och skickar iväg filen, därefter triggar denna respons hos den 'Folder Action' som kör mapp nr 1 - nya filer matas till mapp nr 2 förutsatt att det finns några filer i mapp nr 1.

  • Medlem
  • Trollhättan
  • 2008-06-14 19:21

till old mac

det lät bra d ä precis så jag vill göra:) har gjort mitt script i automator dvs att jag kan typ inget om script igentligen. Men jag skulle jätte gärna se en guide som gör det du just beskrev. tanken är att allt ska gå automatiskt.

  • Medlem
  • Stockholm
  • 2008-06-15 13:51
Ursprungligen av eivindvr:

till old mac

det lät bra d ä precis så jag vill göra:) har gjort mitt script i automator dvs att jag kan typ inget om script igentligen. Men jag skulle jätte gärna se en guide som gör det du just beskrev. tanken är att allt ska gå automatiskt.

"Guide"? Syftar du på en schematisk uppställning av ideen - eller på skriptkod?

Jag kan en del om AppleScript men inget om Automator - vet alltså inte vad du kan göra och inte göra med den senare typen av skript. Så behöver du kod för Automator är jag ställd.

Att själva iden går att få ihop är jag dock övertygad om. Skulle Automator ha begränsningar så finns ju även AppleScript. Ifall det räcker att jag spaltar upp konceptet i punkter så kan jag återkomma med det senare idag.

  • Medlem
  • Trollhättan
  • 2008-06-15 17:30
Ursprungligen av OldMac:

"Guide"? Syftar du på en schematisk uppställning av ideen - eller på skriptkod?

Jag kan en del om AppleScript men inget om Automator - vet alltså inte vad du kan göra och inte göra med den senare typen av skript. Så behöver du kod för Automator är jag ställd.

Att själva iden går att få ihop är jag dock övertygad om. Skulle Automator ha begränsningar så finns ju även AppleScript. Ifall det räcker att jag spaltar upp konceptet i punkter så kan jag återkomma med det senare idag.

jag kan inte applescript men jag antar att jag måste lära mig det.
du kanske kan spalta upp konceptet så får jag forska i det lite:)
jag vet att man kan väva in applescript i Automator också.
men skriv ner punkterna så får jag se om jag kan lösa det.

  • Medlem
  • Trollhättan
  • 2008-06-15 18:48

mitt folder action ser ut så här:

on adding folder items to this_folder after receiving added_items
tell application "Macintosh HD:Users:eivindvr:Library:Workflows:Applications:Folder Actions:tillftp.app"
open added_items
end tell
end adding folder items to

Kan man göra något redan här för att göra det som du beskrev?

  • Medlem
  • Stockholm
  • 2008-06-15 21:01

Först behövs alltså en mapp nr 1 & mapp nr 2.

Följande är en beskrivning och förklaring av den schematiska struktur som mitt koncept består av:

1. När en fil dras till mapp nr 1 triggas en 'Folder Action' kopplad till mapp nr 1 som undersöker om mapp nr 2 innehåller någon fil.

2. Är mapp nr 2 tom flyttas fil nr 1 från mapp nr 1 till mapp nr 2 - vilket triggar den 'Folder Action' som är kopplad till mapp nr 2, som behandlar och skickar iväg filen. Om mapp nr 2 däremot redan innehåller en fil, flyttas ingen fil från mapp nr 1 till mapp nr 2.

3. Båda utfallen under punkt nr 4 (att en fil flyttas eller inte flyttas mellan mapparna nr 1 & 2) innebär att skriptet kopplat till mapp nr 2 endera är aktivt eller blir aktivt. Fördelen med detta är att Automator-skriptet kopplat till mapp nr 2 kan varje gång på nytt starta skriptet kopplat till mapp nr 1. Resultatet är att de filer som läggs i mapp nr 1 - vare sig det är en eller flera filer på en gång, och vare sig det redan finns filer i mapp nr 1 eller ej - kommer att föras en i taget för behandling i mapp nr 2 av Automator-skriptet tills mapp nr 1 är helt tömd på filer.

En smärre komplikation att ev. hantera: jag vet inte om skriptet kopplat till mapp nr 2 kan starta skriptet som är kopplat till mapp nr 1 pga av att detta är avsett att aktiveras som en 'Folder Action'? Om endast flyttningen av en fil till mapp nr 1 kan trigga skriptet kopplat till mappen - då går det istället att göra en fristående kopia av skriptet som gör precis samma sak som 'Folder-Action-skriptet' för mapp nr 1, och som problemfritt kan startas av Automator-skriptet kopplat till mapp nr 2, innan det senare avslutas.

4. Allt som står under de förra punkterna är mycket lättare att utföra än att läsa om det!

--------

Om det skulel vara svårt att skriva skriptet för mapp nr 1 i Automator, går det att skriva ett AppleScript istället med följande typ av grundkod:

tell application "Finder"
activate

set numberOfFilesInFolder1 to the number of files in folder "Mapp 1" of desktop as integer
set numberOfFilesInFolder2 to the number of files in folder "Mapp 2" of desktop as integer

if numberOfFilesInFolder1 is greater than 0 then
if numberOfFilesInFolder2 is less than 1 then

set fileNumberOne to file 1 of folder "Mapp 1" of desktop

move fileNumberOne to folder "Mapp 2" of desktop

end if
end if

end tell

quit

Spar AppleScipt:et som 'programpaket' utan 'startskärm' om du använder en Intel-Mac - det blir då en Intel-fil och Rosetta behöver inte tas i anspråk för att köra filen - annars kan du spara AppleScript-filen som 'program' (utan 'startskärm').

Om istället för exemplets 'desktop', sökvägen till mapparna nr 1 & 2 ska gå till en hårddisk som är startskiva, är kod-principen följande för t ex en mapp som ligger i en mapp: set fileNumberOne to file 1 of folder "Inre mappen" of folder "Yttre mappen" of startup disk

Själv använder jag inte 'Folder Actions' för AppleScript och minns därför bara grundprinciperna som jag lärde mig för några år sedan - men vad jag minns är resten rätt lätt. Förutom skriptets anslutning till mapp nr 1, behövs till ovanstående AppleScript-kod en särskild inledande och avslutande kodrad för att den ska fungera som 'Folder Action'. Hur detta skrivs står i AppleScript's 'Hjälp-funktion', eller så kan sannolikt någon här i forumet bidra med upplysning.

" Kan man göra något redan här för att göra det som du beskrev"

Jag kan som sagt inte Automator. Men om ditt skript fungerar som avsett vad gäller behandlingen av filen räcker det med att lägga till ett kommando som öppnar skriptet som hanterar mapp nr 1 (se under punkt nr 3).

Övrigt: om du vill så går det att lägga till en avbrotts-dialog som dyker upp varje gång en ny fil ska flyttas till mapp nr 2 för behandling. Det går t ex att utforma dialogen så att den påkallar uppmärksamheten med ljudsignal, samt försvinner efter valt antal sekunder om inget avbrott ska göras varpå processen rullar vidare automatiskt.

Återkom gärna med frågor.

  • Medlem
  • Trollhättan
  • 2008-07-07 13:22

men jag tänkte om du hade lust att hjälpa mig med den.
Hur mycket skulle du vilja ha för att göra den?

mvh eivind

  • Medlem
  • Stockholm
  • 2008-07-07 18:26

Nej, inte vill jag ta betalt. Dessutom kan jag ju inte Automator. Och jobbet är ändå redan så gott som gjort. Du har ju själv gjort ett Automator-skript som fungerar, och av mig har du fått förslag på ett AppleScript som vad jag vet fungerar. Det är nästan ingen kodning som återstår, utom att du behöver lägga till en rad i ditt Automator-skript så att det avslutar med att starta det Applescript som arbetar med Mapp nr 1.

Mitt tidigare postade förslag ser antagligen lite komplicerat ut, men ta ett steg i taget så kommer du att se att det blir rätt lätt. Och tycker du att det ändå är svårt - ställ en fråga i taget kring vad du fastnar på, så svarar jag eller någon annan.

Så, första frågan... ?

  • Medlem
  • Stockholm
  • 2008-07-07 19:30

Jag kan gå en smula i förväg i väntan på dina frågor...

1. Skapa och döp mapparna nr 1 & 2. För att enklast kunna följa mitt kod-förslag: placera mapparna på den hårddisk som är startskiva.

2. Till min tidigare publicerade AppleScript kod, lägg till som första rad: "on adding folder items to this_folder after receiving these_items" [skriv kodraden utan citationstecknen]

3. Bestäm var på hårddisken - eller om det nu är på skrivbordet - som du vill ha ditt Automator-skript liggande. Skriv sedan före "end tell" i min tidigare postade AppleScript-kod, ett kommando som startar Automator-skriptet. Kod-princip: "... open file "xxxx" in folder "yyyy" of startup disk..." [skriv koden utan det första och det sista citationstecknet, och utan de inledande och avslutande pounkterna - citationstecknen kring 'file och folder' ska dock stå där de står]

4. Lägg som en sista rad till AppleScript-koden: "end adding folder items to" [skriv också denna kodrad utan citationstecknen].

[genom de tillagda raderna under punkterna 2="2" & 4="4" är nu skripet instruerat att - efter ha kopplats till en mapp aktiveras av filer som läggs i mappen]

4. Gå till mappen "Program". Där hittar du AppleScript's manus-redigare. Kopiera koden och klistra in den i manusredigeraren. Tryck på kompilera. Om allt är rätt utfört, kompileras koden.

5. Efter att jag tittade närmare på hur man kopplar AppleScript till ett mappkommande såg jag att man ska inte för mappkommandon spara som 'programpaket', vilket jag föreslog tidigare. Istället spar du som "Manus", utan "Startskärm", och med synlig filändelse ".scpt".

Den sparda programfilen placerar du i mappen "Folder Actions" i Biblioteket (förutsatt att du inte av säkerhetsskäl vill förvissa dig om att endast du som användare kan köra mappkommandot - i så fall tror jag att du måste använda dig av det Bibliotek som ligger under den personliga användarmappen).

6. För att koppla programfilen till den första av de två mapparna som min föreslagna programkonstruktion bygger på: öppna Manusredigeraren igen i AppleScript-mappen i mappen "Program" på hårddisken - högerklicka (eller dess motsvarighet) för att få fram Manusredigerarens kontext-meny. Om så behövs, kryssa i "Mappkommando" högst upp till vänster. Klicka sedan på "+" nedtill till vänster under vänstra fönstret och välj den mapp du har bestämt som mapp nr 1. Klicka därefter på "+" under högra fönstret, och bläddra fram programfilen där du lagt den i mappen "Folder Actions" - välj programfilen.

7. Du ska nu ha ett fungerande mappkommando. Hamnar en fil i den första mappen förs filen vidare till mapp nr 2 om denna inte innehåller någon fil. Återstår därefter bara att skapa ett fristående AppleScript - en kopia av koden i mappkommandot - och lägga till en rad i Automator som öppnar den filen som sista åtgärd innan Automator-skripet avslutas.

8. Och om du tycker att det här verkar vara för komplicerat och önskar att jag eller någon annan gör jobbet istället...det går alltså inte! Kodförslag kan du alltid få, men för att få detta att slutligen fungera måste alltså en del åtgärder göras av dig direkt i din dator.

Men som sagt, ta ett steg i taget så går det nog bra.

Imponerande OldMac! Vilket engagemang.
Men varför glömde du skärmdumpar?

  • Medlem
  • Trollhättan
  • 2008-07-09 10:06

wow! ja verkligen vilket engagemang:-) jag bugar och bockar.
Jag ska sätta igång och pilla direkt så återkommer jag med frågor:-)

  • Medlem
  • Stockholm
  • 2008-07-09 18:11

"wow! ja verkligen vilket engagemang:-) jag bugar och bockar.
Jag ska sätta igång och pilla direkt så återkommer jag med frågor:-)"

Jag tackar!

En lätt korrigering bara - jag skrev: "Återstår därefter bara att skapa ett fristående AppleScript - en kopia av koden i mappkommandot - och lägga till en rad i Automator som öppnar den filen som sista åtgärd innan Automator-skripet avslutas."

Den beskrivningen råkar innehålla ett fel. Att göra en kopia av koden i mappkomandot skulle ju innehålla även den tillagda startkoden och avslutningen som jag beskrev under punkerna 2 & 4 i min senaste längre post. Korrekt är istället att använda skriptkoden som jag postade tidigare för det AppleScript som Automator avslutande anropar, utan några förändringar (annat än vad som kan krävas pga av mapparnas namn och placeringar). Det AppleScriptet kan dessutom med fördel sparas som 'programpaket' (som nämnt tidigare) istället för 'manus'.

Så besparde jag dig åtminstone den undran över varför det inte fungerade...

  • Medlem
  • Trollhättan
  • 2008-07-11 21:11

mmmm det går inget vidare för mig.
Nu vill jag att scriptet ska se om en mapp är tom, finns det någon fil i mappen så ska den fortsätta som vanligt, men om den är tom så ska den loopa scriptet från början.

går det?

eivind

  • Medlem
  • Stockholm
  • 2008-07-11 23:17

"mmmm det går inget vidare för mig.
Nu vill jag att scriptet ska se om en mapp är tom, finns det någon fil i mappen så ska den fortsätta som vanligt, men om den är tom så ska den loopa scriptet från början.

går det?

eivind"

Har du övergivit konceptet som jag föreslog? Pratar du om Automator-skript eller AppleScript, och för vilken mapp? Och hur har du tänkt dig resten? Det du skriver är oklart i fråga om vad 'fortsätta som vanligt' betyder, och med vilken avsikt som skriptet ska 'loopa från början'.

  • Medlem
  • Stockholm
  • 2008-07-11 23:36

Eftertanke: du kanske har tänkt att lösningen ska vara att mappkommandot kopplat till den första mappen fortsätter att 'loopa' och kollar vad som händer i mapp nr 2, samt flyttar filen från mapp nr 1 till mapp nr 2 när Automator-skriptet är färdigt om inte detta var möjligt då filen placerades i mapp nr 1? I så fall: jag tror att detta kan fungera lika bra - är enklare än mitt ursprungsförslag också - förutsatt att det inte innebär någon nackdel att två skript-processer löper samtidigt (de får inte riskera att störa varandra). Hur länge håller Automator-skriptet på som längst innan det har behandlat filen i mapp nr 2 samt tömt mappen?

  • Medlem
  • Trollhättan
  • 2008-07-14 15:34

hehe jag lyckades lösa det:-)
vet inte riktigt hur men nu funkar det som jag vill:-)

TACK FÖR HJÄLPEN!!!
och alla bra tipps!

eivind

1
Bevaka tråden