2013-11-22 3 views
3

Я пытаюсь создать приложение в Xcode, используя Applescript для преобразования PDF-файлов.Ожидание завершения скрипта оболочки

Проблема в том, что мне нужно Xcode/AppleScript, чтобы дождаться, когда каждая команда «сделать shell-скрипт» завершит обработку, прежде чем она начнет следующую.

Есть ли способ обнаружить, что каждый скрипт закончен?

например.

tell application "System Events" 
     do shell script "/opt/local/bin/convert task1.tif output1.pdf" 
    end tell 

tell application "System Events" 
     do shell script "/opt/local/bin/convert task2.tif output2.pdf" 
    end tell 

Спасибо, Энтони

ответ

5

Во-первых, снимите «делать сценарий оболочки» строки из «системных событий» блоков кода. Системные события не нужны для команды «make shell script».

Далее вы можете заставить applescript не дожидаться завершения команды оболочки, а также вернуть идентификатор PID (идентификатор процесса) команды в applescript. Например, запустите эту команду.

do shell script "/bin/sleep 5" 

Вы увидите, что он является одним из основной 5 второй команды задержки и AppleScript будет ждать этих 5 секунд, прежде чем вернуть управление в сценарий.

Теперь запустите эту команду.

do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!" 

Вы увидите, что теперь AppleScript не ждать 5 секунд, и вы также получите PID команды под управлением сна. Обратите внимание на то, что мы добавили в конец исходной команды, чтобы это произошло.

Мы можем использовать этот PID. Мы можем сделать цикл повторения и проверить, работает ли PID с помощью команды «ps». Когда команда сна заканчивается, PID больше не будет существовать, и мы можем использовать это как триггер, чтобы узнать, когда команда сна завершена.

set thePID to do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!" 

repeat 
    do shell script "ps ax | grep " & thePID & " | grep -v grep | awk '{ print $1 }'" 
    if result is "" then exit repeat 
    delay 0.2 
end repeat 

return "the process is complete!" 

Это должно дать вам инструменты для достижения вашей цели. Удачи.

Смежные вопросы