applescript non si fermerà mai

0

Ho un applescript che utilizza una named pipe e le trasmette dati. Ho il mio script che passa detti dati in un ciclo while, che funziona, ma trovo che non riesco a fermare lo script manualmente senza chiudere il programma Script Editor. Non ho bisogno di forzare la chiusura.

Ecco lo snippet pertinente del mio script (d è un riferimento al film QT attivo e in riproduzione, aname è un percorso POSIX valido che specifica la posizione della named pipe):

repeat while d is playing
    set currtime to (get current time of d) as string
    get currtime
    do shell script "echo " & currtime & " > " & aname
    delay 0.125
end repeat
    
posta jml 22.08.2015 - 23:29
fonte

2 risposte

1

Quindi il seguente script invierà il testo alla pipe, in background, e se il lavoro in background non esce dopo un secondo lo ucciderà. Questo dovrebbe impedire allo script di bloccare ...

#!/bin/sh
echo $1 > $2 &

sleep 1

# Following is necessary. Seems to need it or
# job will not complete! Also seen at
#  http://stackoverflow.com/a/10736613/348694
echo "Checking for running jobs..."
jobs

kill %% >/dev/null 2>&1

if [ $? -eq 0 ] ; then
   echo "Taking too long. Killed..."
   exit 1
fi

exit 0

Puoi lanciarlo da AS in questo modo ...

set qstr to quoted form of (currtime as string)
try
   do shell script "/some/dir/topipe.sh " & qstr & " " & mypipe
on error
   display dialog "ERROR:....."
   return
end try
    
risposta data 29.08.2015 - 20:59
fonte
1

Sei sicuro di avere qualcosa all'altra estremità della named pipe che accetta i dati in realtà? "do shell script" non uscirà finché qualcosa non tenta effettivamente di leggere dalla pipe. Se vuoi ovviare a questo, puoi usare:

do shell script "sh -c \"echo " & currtime & " > " & aname & "\" &> /dev/null &"

Questo manterrà le shell di spawning che attenderanno tutte le volte che userai la pipe. Non è davvero una grande soluzione. Idealmente dovresti avere qualcosa in attesa di dati prima di inviare qualcosa a una named pipe, o generare qualcosa per consumare i dati.

    
risposta data 23.08.2015 - 08:20
fonte

Leggi altre domande sui tag