2017-02-22 11 views
1

Ich möchte ein Skript, das eine Anwendung beendet, nachdem es die Verarbeitung von Dateien abgeschlossen hat. Der unten stehende Code ist einer, den ich versucht habe, mich selbst zu erschaffen, indem ich nach anderen Kreationen forschte, aber ich hatte kein Glück, sie tatsächlich zum Laufen zu bringen. diese spezifische Software Dosis automatisierte Workflows daher nicht den einzigen Auslöser unterstützen konnte ich war zu gehen, die von dem CPU% finden, da es bis zu 100%, wenn in Gebrauch oder so wenig wie 1,3% im Leerlauf,Verwenden von Apple-Skript zum Beenden der App bei einer bestimmten CPU%

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 

wenn jeder benutzen kann kann mir helfen, dies zum Laufen zu bringen oder irgendwelche Empfehlungen zu haben, die sehr geschätzt würden. Ich bin auch neu bei Aescripting.

Antwort

0

Sie haben es im Grunde genommen richtig, aber es sieht so aus, als hätten Sie versucht, vor der Überprüfung zu springen, dass die Teile korrekt funktionieren. Es kann auch hilfreich sein, wenn Sie die Handler und Variablen benennen, was sie zu tun versuchen. In diesem Fall scheint es beispielsweise so zu sein, dass Ihr Handler eine App überwacht und diese App dann beendet, sobald sie eine geringe CPU-Auslastung erreicht.

Beachten Sie, dass ich den Prozessnamen in TaskPaper in den Beispielen geändert habe, weil ich das zur Verfügung habe.

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 

Zu diesem Zeitpunkt wissen wir zwei Dinge: dass die Shell-Skript, um die Zahl, die wir wollen zurückkehrt, und dass sie es als String ist zurück.

Um Zahlen zuverlässig zu vergleichen, müssen wir sie in numerische Werte umwandeln.

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 

Dies funktioniert, aber es versucht, auch processToMonitor sogar zu beenden, wenn processToMonitor nicht ausgeführt wird.

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 

Jetzt sind wir bereit, einen repeat um den Handler hinzuzufügen:

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 

ich eine delay auf jeder Wiederholung hinzugefügt, da sich endlos wiederholenden Skripte oft eine CPU hog in sich selbst werden kann.

Verwandte Themen