2017-02-22 90 views
1

Мне нужен скрипт, который выйдет из приложения после того, как он завершит обработку файлов. приведенный ниже код - это тот, который я попытался создать самостоятельно, исследуя другие творения, но не повезло, фактически, чтобы он работал. эта конкретная доза программное обеспечение не поддерживает автоматизированные рабочие процессы, поэтому единственный триггер я мог бы найти было пойти на CPU%, как он может использовать до 100% при использовании или всего 1,3% при бездействии,с помощью сценария apple для выхода из приложения с заданным процессором%

getProcessPercentCPU("Mixed In Key 8") 
set someProcess to getProcessPercentCPU("Mixed In Key 8") 
on getProcessPercentCPU(someProcess) 

repeat 

    do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & someProcess & "$/ {print $1}'" 

    if someProcess is less than "2.0" then 
     application "Mixed In Key 8" quit 
    end if 
end repeat 
end getProcessPercentCPU 

если кто-нибудь может помочь мне с тем, чтобы это работало или какие-либо рекомендации, которые были бы очень оценены. также я новичок в applescripting.

ответ

0

У вас это в основном правильно, но похоже, что вы пытались прыгнуть вперед, прежде чем проверять правильность работы кусков. Это также может помочь, если вы назвали обработчиков и переменных, что они пытаются сделать. Например, в этом случае кажется, что ваш обработчик контролирует приложение, а затем выходит из этого приложения, когда он сталкивается с низким потреблением ЦП.

Обратите внимание, что я изменил имя процесса на TaskPaper в примерах, потому что у меня есть это доступное.

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 
    display dialog processCPU 
end quitOnLowCPU 

На данный момент мы знаем две вещи: то, что сценарий оболочки возвращает число, мы хотим, и что это возвращение его в виде строки.

Для надежного сравнения номеров нам необходимо преобразовать их в числовые значения.

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 

    --convert the shell script response string to a number 
    set processCPU to processCPU as number 
    --compare to the threshold of quitting 
    if processCPU is less than 2.0 then 
     tell application processToMonitor to quit 
    end if 
end quitOnLowCPU 

Это работает, но он также пытается бросить processToMonitor даже если processToMonitor не работает.

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 

    if processCPU is "" then 
     --the process is gone. We're done 
     return 
    end if 

    --convert the shell script response string to a number 
    set processCPU to processCPU as number 
    --compare to the threshold of quitting 
    if processCPU is less than 2.0 then 
     tell application processToMonitor to quit 
    end if 
end quitOnLowCPU 

Теперь мы готовы добавить repeat вокруг обработчика:

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    repeat 
     set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 
     if processCPU is "" then 
      --the process is gone. We're done 
      return 
     end if 

     --convert the shell script response string to a number 
     set processCPU to processCPU as number 
     --compare to the threshold of quitting 
     if processCPU is less than 2.0 then 
      tell application processToMonitor to quit 
     end if 
     delay 1 
    end repeat 
end quitOnLowCPU 

Я добавил delay на каждом повторе, потому что бесконечно повторяющиеся сценарии часто могут стать свиньей CPU сами по себе.