Appleskript: Hur göra ngt på ett klockslag?

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2007-11-22 22:31
set theDate to current date
set theTime to (time string of theDate) as string

repeat
	if theTime is not "07.00.00" then
		say "no"
	else
		say "yes"
	end if
end repeat

Jag vill i detta skript få datorn att säga "yes" kl 07.00.00. Den gör inte det. Varför?

(För att jag har gjort fel. Vad har jag gjort för fel?)

Du har nog inte gjort någon fel per se, det är bara det att när du skriver så så måste du pricka exakt rätt på sekunden.

Skriv in en tid typ tjugo sekunder in i framtiden och skriv så här istället så säger Alex yes när det är dags:

repeat
	set theDate to current date
	set theTime to (time string of theDate) as string
	if theTime is not "22.55.50" then
		say "no"
	else
		say "yes"
	end if
end repeat
  • Medlem
  • Stockholm
  • 2007-11-22 23:15
Ursprungligen av Baron:
set theDate to current date
set theTime to (time string of theDate) as string

repeat
	if theTime is not "07.00.00" then
		say "no"
	else
		say "yes"
	end if
end repeat

Jag vill i detta skript få datorn att säga "yes" kl 07.00.00. Den gör inte det. Varför?

(För att jag har gjort fel. Vad har jag gjort för fel?)

Det som du gjorde "fel" var eg att läsa in tiden en gång, ex 22.30 och sedan jämföra den om och om igen likt:

22.30 == 07.00
22.30 == 07.00
22.30 == 07.00
22.30 == 07.00
22.30 == 07.00

eftersom du inte läser in vad tiden är nu i loopen

Dock kommer ju den där loopen att lägga CPUn på 100% vilket kanske inte är vad du önskar, eller ja, hur mycket CPU som ny applescript orkar konsumera men mer än nödvändigt

I och för sig inte så dumt tänkt, men tyvärr inte en helt framkomlig väg.

Om man skall ha AppleScript som går oavbrutet skall man använda sig av en s.k. "idle handler", det är en metod som gör att att AppleScript verkligen konsumerar minimalt med kräm, för precis som ntity säger så drar en repeat-loop av det slag du gjort här i princip upp till 100% CPU, att jämföra med en Idle-loop som är knappt märkbar. Dock skulle du i en sån loop nog vilja säga "is greater than 07.00.00 and less than 07.00.10" eller vad du nu har för precisionskrav.

Men, frågan är om du inte skall använda en annan metod. Det du är ute efter är "schedulers", vilket det finns ett antal utav, bland annat en som du redan har - nämligen iCal !

I iCal kan du säga att ett AppleScript (kör manus) skall utföras vid ett visst datum och klockslag.

  • Medlem
  • 2007-11-23 06:40

Okej. Är det en vanlig "aktivitet" i iCal? Och den körs även när iCal är avstängt?

  • Medlem
  • Stockholm
  • 2007-11-23 07:29
Ursprungligen av Baron:

Okej. Är det en vanlig "aktivitet" i iCal? Och den körs även när iCal är avstängt?

Ja.

Lägg in en händelse, och när och hur den skall repeteras. Lägg sedan in att händelsen skall köra ett skript istf att plinga eller något som påminnelse.

Tänk på att ha koll på var ditt skript ligger. Skript som kör automatiskt en längre tid riskerar att slängas av misstag, då man inte kommer ihåg att det där lilla skriptet faktiskt körs varje vecka.

Vänligen, Ylan

  • Medlem
  • 2007-11-23 08:50

Okej, "Ja och ja" hoppas jag.

Om jag vill upprepa något med tätare intervall då, typ var 10:e minut?

Du kan använda systemtjänsten launchd för att utföra saker med jämna mellanrum.
Det är den tjänsten som de inbyggda funktionerna i OS X använder.

För att slippa joxa i terminalen kan du använda Peter Borgs trevliga lilla gratisprogram Lingon.

Man kan göra sånt via cronjob (UNIX-grej just för att göra saker med vissa intervall), men jag vet inte om det finns något smidigt gränssnitt för det, eller om man måste gå via terminalen och semikryptiska inställningsfiler.

EDIT: Här får man visst vara snabbare...

1
Bevaka tråden