AppleScript n'arrête pas de courir

0

J'ai un script AppleScript qui utilise un canal nommé et lui transmet des données. Mon script transmet les données dans une boucle while, ce qui fonctionne, mais je constate que je ne parviens pas à arrêter le script manuellement sans quitter le programme Script Editor. Je n'ai pas besoin de forcer quitter.

Voici l'extrait pertinent de mon script (d est une référence de film QT active et en cours de lecture; aname est un chemin POSIX valide qui spécifie l'emplacement du canal nommé):

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
jml
la source
1
Il y a un problème avec AppleScript et pipes. J'ai posté une question sur le problème ici . C’est ma solution à votre problème, mais hélas cela ne fonctionne pas comme je l’
Vic

Réponses:

1

Ainsi, le script suivant enverra le texte au canal, en arrière-plan, et si le travail en arrière-plan ne se ferme pas au bout d'une seconde, il le supprimera. Cela devrait empêcher le script de bloquer ...

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

Vous pouvez le lancer depuis AS comme ça ...

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
Vic
la source
1

Êtes-vous sûr que quelque chose à l'autre bout de ce canal nommé accepte réellement les données? "do shell script" ne se fermera pas tant que quelque chose n'essayera pas de lire dans le canal. Si vous souhaitez contourner ce problème, vous pouvez utiliser:

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

Cela gardera les coquilles en train de se reproduire qui attendront toutes que vous utilisiez réellement le tuyau. Pas vraiment une bonne solution. Dans l'idéal, vous devriez avoir quelque chose en attente de données avant d'envoyer quoi que ce soit à un canal nommé ou de générer quelque chose pour utiliser les données.

William T Froggard
la source