Applescript Crashing su Infinite Loop

0

Sto cercando di usare il applescript per aspettare una parola chiave seriale (nel terminale Screen-in), quindi mettere in pausa Spotify quando viene vista la parola chiave. All'inizio funziona bene, ma poi si blocca rapidamente. Qualcuno può farmi sapere cosa sto sbagliando?

Grazie in anticipo.

Mi dispiace, ma non riesco a ottenere il codice di Applescript per formattare correttamente qui ... Ecco il codice di Applescript:

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
    
posta Fed 11.08.2016 - 17:10
fonte

2 risposte

0

Ora ho l'output della schermata su log.txt, e il seguente applescript funziona alla grande!

imposta il trigger su 1

imposta stopString su ""

ripeti fino a (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

Fine ripetizione

    
risposta data 12.08.2016 - 03:52
fonte
0

Come tutti i loop while / do (Applescript repeat), devi assicurarti che una condizione sia soddisfatta affinché esca.

Come ti assicuri che una condizione sarà soddisfatta e non andrà all'infinito? Da quello che posso dire hai una finestra che può contenere "Start MP3" o "Stop Loop". Cosa succede se contiene "I love balloons" o è vuoto?

Non hai creato alcuna logica per questo (intercettazione degli errori) in modo che questo ciclo si ripeta finché la finestra non soddisfa la condizione di arresto.

Per impedire che tu inserisca un fail safe che imposta la condizione che arresta il ciclo. Puoi farlo aggiungendo un contatore e controllando il contatore rispetto a un valore predeterminato che costringerà la condizione che arresta il loop a diventare vero.

Ad esempio, impostiamo un limite per il ciclo eseguito 10 volte:

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
    
risposta data 11.08.2016 - 17:21
fonte

Leggi altre domande sui tag