Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Applescript: Wie Dropbox Status abfragen?

Applescript: Wie Dropbox Status abfragen?

P.Si
P.Si16.02.1011:32
Hallo,

ich bräuchte Hilfe mit Applescript, da ich vermutlich wieder mal das unmögliche möchte.

Es gibt viele Shutdownprogramme, die meisten mit Timerfunktion, doch dies kann ich nicht brauchen.

Meine Situation:
Ich speichere diverse Daten auf Dropbox, um diese zuhause wie auch an der Arbeit präsent zu haben. Nun habe ich ein kleines Script geschrieben, das mir zwei Anwendungen schliesst, damit diese mit Dropbox synchronisiert werden. Wenn ich nun aber den Rechner herunterfahre, würgt es die Synchronisation ab, was natürlich nicht wirklich toll ist.
Es kann auch vorkommen, dass gerade grössere mengen an Daten synchronisiert werden und ich nicht immer warten möchte, bis diese beendet sind. Ich möchte einfach nur das Script starten und diese beendet die vorgegebenen Programme und sollte nun noch überprüfen, ob Dropbox noch synchronisiert oder schon fertig ist. Wenn die Synchronisation beendet ist, fährt das Script den Rechner herunter.

Bis auf das Problem mit Dropbox, habe ich alles hinbekommen, was durch "copy&paste" auch nicht wirklich schwierig war.

Ist dies überhaupt möglich?
Kann ich den Status abfragen?
Kann ich überprüfen, ob er gerade mit dem Internet kommuniziert? Wenn ja wie?

Ich wäre für hilfreiche Tipps und Lösungen sehr Dankbar und natürlich auch auf Programme, die schon existieren und das gleiche tun.

Schon mal vielen Dank.
P.Si
0

Kommentare

bmc desgin16.02.1023:13
Dazu musstest du abfragen, ob dropbox gerade Daten synct...
Bei AppleScript wäre das unter der Unix Ebene möglich...
Hatte das mal mit nem shoutcast Server gemacht...

Cheers
„Ask your questions...“
0
P.Si
P.Si17.02.1010:30
Danke Dir bmc design

Hast Du mir evtl. einen Anhaltspunkt, wonach ich suchen muss?
Befehle im Unix, mit denen man sich näher befassen muss, um ans Ziel zu gelangen?
Von UNIX hab ich gar keine Ahnung, würde aber gerne versuchen es mit ein paar Tipps selbst zu lösen.

Vielleicht hat noch jemand eine Idee.

PS: bmc design: Hab gerade in Dein Profil geschaut und war erstaunt. Wie hast Du es nur geschafft, Dich im '09 zu Registrieren obwohl Deine letzte Anmeldung im '02 war?
0
P.Si
P.Si17.02.1016:00
So, nun habe ich unter UNIX und Applescript schon einige Ansätze gefunden, bin aber nach so vielen Webseiten/Foren/möglichkeiten ziemlich verwirrt und muss mich etwas erholen.

Ich hatte die Idee, Dropbox zu beenden, sobald er/es auf "Idle" geht, doch dies ist nie der Fall.

Nun ist die Programm Auslastung <0.5 %, wenn nichts zu tun ist und beim Synchronisieren ist die Auslastung >10%.
Eine möglichkeit ist nun zu schauen, ob Dropbox <1% Auslastung erzeugt und dann zu beenden.

Wie ich das nun feststellen kann, muss ich noch schauen. Vielleicht hat jemand eine Idee.

P.Si
0
_mäuschen
_mäuschen17.02.1017:46

set app_name to "Dropbox"
set limit to 1
set cpu_usage to 100

set app_pid to do shell script ("ps auxww | grep '[/]" & app_name & "'" & " | awk '{print $2}'")

if app_pid is greater than 0 then
    
    repeat until cpu_usage is less than limit
        set cpu_usage to (do shell script ("ps -c -o %cpu='' -p " & app_pid)) as integer
        delay 1
    end repeat
    
end if

0
P.Si
P.Si17.02.1023:33
_mäuschen: Ich verneige mich vor Dir und Danke Dir, dass Du mir gleich das ganze Script lieferst.

Ich habe es gerade mal bis "top" und "ps" geschafft, leider sind alle versuche gescheitert.

Ich habe das Script nun mal 1:1 übernommen und erhalte folgende fehlermeldung(auch als Programm gespeichert):
ps: Invalid process id: 846\r837
Prozess-ID
846: dbfseventsd
837: Dropbox

Ich werde mal versuchen, zu verstehen, wie das Script genau funktioniert, vielleicht finde ich ja das Problem.

Nochmals vielen Dank an Dich _mäuschen

P.Si
0
P.Si
P.Si17.02.1023:58
Dies ist, was das Event-Protokoll vom Scripteditor listet:
tell current application
    do shell script "ps auxww | grep '[/]Dropbox' | awk '{print $2}'"
        "846
837"
    do shell script "ps -c -o %cpu='' -p 846
837"
        "ps: Invalid process id: 846\\r837"
0
P.Si
P.Si18.02.1000:13
Wenn ich nun in folgender Zeile den PID direkt eingebe, dann funktioniert es einwandfrei.
set cpu_usage to (do shell script ("ps -c -o %cpu='' -p " & 837)) as integer

Mal schauen, ob ich es hinbekomme.
0
_mäuschen
_mäuschen18.02.1000:37

Nach einem Neustart wird die PID eine andere sein.

Was geschieht, wenn Du zum Test set app_name to "Mail"
eingibst?

0
P.Si
P.Si18.02.1000:59
Ja, das ist mir klar, habe es nur mal so versucht, um zu schauen, ob es mit der aktuellen PID funktioniert.

Mit Mail sieht das Ergebnis wie folgt aus:
tell current application
    do shell script "ps auxww | grep '[/]Mail' | awk '{print $2}'"
        "5587"
    do shell script "ps -c -o %cpu='' -p 5587"
        "  0.0"
end tell
Funktioniert ohne Fehler.
0
P.Si
P.Si18.02.1009:12
Was ich bis jetzt herausgefunden habe ist, dass dbfseventsd als root und Dropbox als User (also in meinem Fall als Patrick) gestartet wird.

Soviel ich verstanden habe, ruft ps auxww alle PIDs von allen Benutzern auf. Nun müsste man eigentlich nur nach den PIDs vom Benutzer suchen können.

Ich habe versucht, es mit -u UserID und anderen Optionen zu filtern, bin aber kläglich gescheitert.
Entweder erhalte ich gar keinen Wert oder die gleichen zwei wie mit ps auxww.

Ich spüre, dass ich dem Ziel trotzdem immer näher komme.
0
P.Si
P.Si18.02.1010:24
Problem gelöst:

Ich habe zwar NULL Ahnung von UNIX, aber auch ein blindes Huhn findet mal ein Korn im Heu.

Das ganze Script sieht nun so aus:
set app_name to "Dropbox"
set user to do shell script "whoami"
set limit to 1
set cpu_usage to 100

set app_pid to do shell script ("ps  auxww | grep  '[/]" & app_name & "'" & " | 
  grep '" & user & "' | awk '{print $2}'")

if app_pid is greater than 0 then
    
    repeat until cpu_usage is less than limit
        set cpu_usage to (do shell script ("ps -c -o %cpu='' -p " & app_pid)) as integer
        delay 1
    end repeat
    
end if

Nochmals besten Dank an _mäuschen für die Super Hilfeleistung, hoffentlich kann ich mich mal bei Dir revanchieren.

Gruss
P.Si
0
_mäuschen
_mäuschen18.02.1010:42

Ev. nur u

do shell script "ps u | grep '[/]Dropbox' | awk '{print $2}'"

0
P.Si
P.Si18.02.1021:17
_mäuschen: Ich habe einige Optionen versucht, unter anderem auch diese, hat aber nicht funktioniert.
Mit dem Zusatz grep '" & user & "' funktioniert es wunderbar.

PS: Dieses Profilbild gefällt mir schon viel besser.

Nochmals Danke.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.