Tengo el siguiente flujo de trabajo que necesito ejecutar diariamente por un período de días:
Las computadoras se inician en un momento específico, Mathematica y un cuaderno de Mathematica específico se lanzan y evalúan. Luego tengo que dejar Mathematica programáticamente y dejar que los horarios relevantes apaguen las computadoras. He resuelto todo aquí excepto el paso resaltado para dejar Mathematica con una aplicación de Applescript.
Para empezar, he creado una simple aplicación usando el Editor de Apple :
tell application "Mathematica" to quit
Esto apagará Mathematica si el cuaderno abierto ha sido guardado, lo que el cuaderno hace por sí mismo. Ahora necesito agregar un temporizador a la aplicación de Applescript.
Una pregunta anterior Flujo de trabajo automático o AppleScript para cerrar Safari después de un período de tiempo hace algo similar que esperaba adaptar a mis necesidades. Muestra el siguiente código:
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
No necesito los cuadros de diálogo y quiero que cierre Mathematica después de digamos 15 minutos, así que intenté esto como un próximo paso hacia una solución.
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
No funciona.
Así que tengo dos preguntas, ¿puede alguien sugerir:
- ¿Cómo hacer que mi código modificado funcione?
- ¿Cómo alterarlo para que apague Mathematica a una hora específica sólo en días de semana?
Lo último funcionaría mejor para mí, ya que creo que tendría menos conflictos si apagara Mathematica en un momento específico en vez de después de que haya pasado una cierta cantidad de tiempo.