J'ai le flux de travail suivant que je dois exécuter sur une base quotidienne pendant une période de plusieurs jours :
Les ordinateurs démarrent à une heure précise, Mathematica et un bloc-notes Mathematica spécifique sont lancés et évalués. Je dois ensuite quitter Mathematica de manière programmatique et laisser les programmes correspondants éteindre les ordinateurs. J'ai tout prévu ici, sauf l'étape mise en évidence pour quitter Mathematica avec une application Applescript.
Pour commencer, j'ai créé une application simple à l'aide de l'application Éditeur Applescript :
tell application "Mathematica" to quit
Cela arrêtera Mathematica si le carnet de notes ouvert a été sauvegardé, ce que le carnet de notes fait lui-même. Je dois maintenant ajouter une minuterie à l'application Applescript.
Une question précédente Flux de travail Automator ou AppleScript pour fermer Safari après un certain temps fait quelque chose de similaire que j'espérais pouvoir adapter à mes besoins. Il affiche le code suivant :
global quit_after, check_every
set quit_after to 2700
set check_every to 10
set minute to quit_after / 60
display dialog "Check is performed every " & check_every & " seconds. Things will be quit after " & minute & " minutesof system inactivity."
on reopen
display dialog "Check is performed every " & check_every & " seconds. Things will be quit after " & minute & " minutes of system inactivity."
end reopen
on idle
set idletime to do shell script "echo $((`ioreg -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"
if (idletime as integer) > quit_after then
tell application "System Events"
if ((name of processes) contains "Safari") then
tell application "Safari" to quit
end if
end tell
end if
return check_every
end idle
Je n'ai pas besoin des boîtes de dialogue et je veux qu'il ferme Mathematica au bout de 15 minutes, par exemple. J'ai donc essayé ceci comme prochaine étape vers une solution.
global quit_after, check_every
set quit_after to 900
set check_every to 10
set minute to quit_after / 60
on idle
set idletime to do shell script "echo $((`ioreg -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"
if (idletime as integer) > quit_after then
tell application "System Events"
if ((name of processes) contains "Mathematica") then
tell application "Mathematica" to quit
end if
end tell
end if
return check_every
end idle
Ça ne marche pas.
J'ai donc deux questions, quelqu'un peut-il me conseiller ?
- Comment faire pour que mon code modifié fonctionne ?
- Comment le modifier pour qu'il arrête Mathematica à une heure précise les jours de semaine uniquement ?
Cette dernière solution me conviendrait mieux, car je pense que j'aurais moins de conflits si j'arrêtais Mathematica à un moment précis plutôt qu'après un certain laps de temps.