He escrito un pequeño applescript que me gustaría para que se ejecute automáticamente cada 2 horas. He escrito el siguiente launchd demonio (probablemente es un agente):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>com.zerowidth.launched.aspect</string>
<key>Program</key>
<string>/usr/bin/osascript</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string
<string>/Users/***/my_script.scpt</string>
</array>
<key>StandardOutPath</key>
<string>/Users/***/file_log.log</string>
<key>RunAtLoad</key>
<true/>
<key>ThrottleInterval</key>
<integer>7200</integer>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Luego he abierto el terminal y hacer
launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist
Funcionó bien, pero sólo una vez y no cada dos horas. La comprobación de la Consola tengo las siguientes mensajes (y muchos más):
com.apple.xpc.launchd[1] (com.zerowidth.lanzado.de aspecto): Este servicio se define a estar funcionando constantemente y es inherentemente ineficiente.
Dec 16 17:02:25 de Aire-de-mí-2 com.apple.xpc.launchd[1] (com.zerowidth.lanzado.de aspecto): el Servicio sólo se ejecutó durante 7 segundos. Empujando a reaparecer por 7193 segundos.
Me pueden ayudar en la comprensión de lo que está pasando, por favor? ¿Cómo puedo ejecutar el script de apple cada dos horas?
Gracias.
EDIT. Puedo añadir, siguiendo a Robert, el asesoramiento, la secuencia de comandos de Python y el Applescript.
Aquí es la secuencia de comandos de Python. Se pide a la consola para ejecutar el LocateMe de comando y de esto se obtiene la latitud y longitud del lugar donde estoy. A continuación, llama a una API para obtener el atardecer y el amanecer del tiempo de este lugar. Por último una pequeña función decide si es de día (amanecer < ahora
output = os.popen('/Users/***/Desktop/LocateMe').read()
###I extract my coordinates
coord = output[1:25]
lat = float(coord[1:12]) ###latitude
long = float(coord[13:25]) ### longitude
my_sunrise, my_sunset = get_ris_and_set(lat, long) ##this function calls an API that gives sunset and sunrise time in the position given by (lat,long)
my_sunset1 = my_sunset.time()
my_sunrise1 = my_sunrise.time()
result = str(is_day(now.time(), my_sunrise1, my_sunset1))
### compare the time now and returns true if it is day false otherwise
with open('/Users/***/Desktop/log_file.txt', 'a') as f:
print(result, file=f)
sys.exit()
Aquí está el Applescript: se ejecuta la secuencia de comandos de Python arriba y lee el valor booleano (si es de día o no). A continuación, se comprueba si el modo oscuro en Mojave es y cambia si es necesario.
tell application id "com.apple.systemevents"
tell application "Terminal"
do shell script "/usr/local/bin/python3 /Users/***/Desktop/python.py $@"
end tell
tell appearance preferences
set value to do shell script "tail -n 1 /Users/***/Desktop/log_file.txt"
if dark mode is true and value = "True" then
set dark mode to false
else if dark mode is false and value = "False" then
set dark mode to true
else
return
end if
end tell
end tell