applescript no dejará de ejecutarse

0

Tengo un applecript que utiliza una tubería con nombre y datos de tuberías a ella. Tengo mi script que pasa dichos datos en un bucle while, que está funcionando, pero encuentro que no puedo detener el script manualmente sin salir del programa Script Editor. No necesito forzar el abandono.

Aquí está el fragmento relevante de mi guión (d es una referencia de película QT que está activa y en reproducción; aname es una ruta POSIX válida que especifica la ubicación de la canalización con nombre):

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
    
pregunta jml 22.08.2015 - 23:29

2 respuestas

1

Por lo tanto, la siguiente secuencia de comandos enviará el texto a la canalización, en segundo plano, y si el trabajo en segundo plano no finaliza después de un segundo, lo eliminará. Esto debería evitar que el script bloquee ...

#!/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

Puedes iniciarlo desde AS como este ...

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
    
respondido por el Vic 29.08.2015 - 20:59
1

¿Está seguro de que tiene algo en el otro extremo de la tubería con nombre que acepta los datos? "do shell script" no se cerrará hasta que algo intente leer el canal. Si quiere evitar esto, puede usar:

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

Esto mantendrá las conchas de desove que esperarán hasta que realmente uses la tubería. No es realmente una gran solución. Lo ideal es tener algo esperando los datos antes de enviar algo a una canalización con nombre o generar algo para consumir los datos.

    
respondido por el William T Froggard 23.08.2015 - 08:20

Lea otras preguntas en las etiquetas