Tengo el siguiente flujo de trabajo que necesito ejecutar diariamente por un período de días:
Lascomputadorasseinicianaunahoraespecífica,MathematicayuncuadernoespecíficodeMathematicaseinicianyevalúan.LuegonecesitodejarMathematicaprogramáticamenteydejarqueloshorariosrelevantesapaguenlascomputadoras.Heresueltotodoaquí,exceptoelpasoresaltadoparasalirdeMathematicaconunaaplicaciónApplescript.
Paraempezar,creéunaaplicaciónsimpleusandoelEditordeApple:
tellapplication"Mathematica" to quit
Esto cerrará Mathematica si se ha guardado el cuaderno abierto que el cuaderno hace por sí mismo. Ahora necesito agregar un temporizador a la aplicación Applescript.
Una pregunta anterior El flujo de trabajo de Automator 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 unos 15 minutos, así que intenté esto como el siguiente 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.
Tengo dos preguntas, ¿alguien puede sugerirlo?
- ¿Cómo hacer que mi código modificado funcione?
- ¿Cómo modificarlo para que cierre Mathematica a una hora específica solo en días laborales?
El último funcionaría mejor para mí ya que creo que tendría menos conflictos si cierro Mathematica en un momento específico en lugar de después de que haya transcurrido cierto tiempo.