Applescript Crashing on Infinite Loop

0

Estoy tratando de usar applecript para esperar una palabra clave de serie (en la pantalla, en la terminal), y luego pausePlay Spotify cuando se ve la palabra clave. Funciona bien al principio, pero luego se bloquea rápidamente. ¿Alguien puede hacerme saber qué estoy haciendo mal?

Gracias de antemano.

Lo siento, pero parece que no puedo hacer que el código Applescript se formatee correctamente aquí ... Aquí está el código de Apple:

tell application "Terminal"
    set the bounds of window 1 to {0, 0, 500, 100}
end tell

set trigger to 1

set stopString to ""

repeat until (stopString = "stop")

    tell application "Terminal"

        if the contents of window 1 contains "Start MP3" and trigger is 1 then
            tell application "Spotify" to playpause
            set trigger to 0
        end if

        if the contents of window 1 does not contain "Start MP3" then
            set trigger to 1
        end if

        if the contents of window 1 contains "Stop Loop" then
            set stopString to "stop"
        end if


    end tell
end repeat
    
pregunta Fed 11.08.2016 - 17:10

2 respuestas

0

Ahora tengo salida de pantalla a log.txt, ¡y el siguiente script de Apple funciona muy bien!

establece el disparador en 1

establece stopString en ""

repetir hasta que (stopString="stop")

set testTxt to paragraphs of (read POSIX file "/Users/fed/log.txt")
set countTxt to (count of testTxt) - 1
set lastLine to item countTxt of testTxt    
if lastLine contains "Start MP3" and trigger is 1 then
    tell application "Spotify" to playpause
    set trigger to 0
end if

if lastLine does not contain "Start MP3" then
    set trigger to 1
end if

if lastLine contains "Stop Loop" then
    set stopString to "stop"
end if

finalizar repetición

    
respondido por el Fed 12.08.2016 - 03:52
0

Como todos los bucles while / do (repetición de Apple), debes asegurarte de que se cumpla una condición para que salga.

¿Cómo se asegura de que se cumpla una condición y no se prolongue infinitamente? Por lo que puedo decirte, tienes una ventana que puede contener "Iniciar MP3" o "Detener bucle". ¿Qué sucede si contiene "Me encantan los globos" o está en blanco?

No ha creado ninguna lógica para esto (captura de errores) por lo que este bucle se repetirá hasta que la ventana cumpla con las condiciones para detenerse.

Para evitar que coloques una protección contra fallas que establezca la condición que detiene el ciclo. Puede hacer esto agregando un contador y comparando el contador con un valor predeterminado que forzará la condición que detiene el bucle para que se vuelva realidad.

Por ejemplo, establecemos un límite para que el bucle se ejecute 10 veces:

set count to 0

repeat until (stopString = "stop")

    ...


    if count > 10 then
        set stopString to "stop"
    end if

    set count to count + 1

end repeat
    
respondido por el Allan 11.08.2016 - 17:21

Lea otras preguntas en las etiquetas