• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AppleScript und Shell Script "Ping"

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Hallo liebe Developer-Freunde!


Ich stehe vor einem riesigen Fragezeichen:

Ich schreibe an einem Skript, dass ein (oder mehrere) Ping sendet.
Das sieht dann aus wie folgt:
Code:
do shell script "Ping -c 10 www.beispiel-domain.de
Das klappt so auch schon einwandfrei und wunderbar.

Jetzt möchte Ich gerne die Zeiten verwerten. Sprich, ich möchte den Output, den mir das
Shell Script bringt:
64 bytes from 209.85.135.104: icmp_seq=1 ttl=243 time=72.126 ms
64 bytes from 209.85.135.104: icmp_seq=2 ttl=243 time=72.340 ms
auswerten. Ich möchte die Zeiten der jeweiligen Pings rausfiltern um dann Weitere Berechnungen anzustellen.
Ich habe folgendes versucht:
Code:
set Skript to do shell skript "Ping -c 10 www.beispiel-domain.de
set AnsSkript to value/text/time returned of Skript
Habe alle Varianten durchprobiert.

Es kommt immer eine Meldung "3 packets transmitted, 2 packets received, 33% packet loss
round-trip min/avg/max/stddev = 71.425/72.465/73.506/1.041 ms"“ kann nicht gelesen werden."


Hat jemand eine Idee?
Hab Ich etwas falsch gemacht?
Oder gibt es noch ganz andere Möglichkeiten??


Liebe Grüße und Vielen Dank
Mini-Leo
 

crashtron

Idared
Registriert
15.01.06
Beiträge
27
Also wenn ich im Script Debugger folgendes mache:
Code:
set Skript to do shell script "Ping -c 10 www.beispiel-domain.de"

dann ist in der Varible Skript folgendes gespeichert:
Code:
PING www.beispiel-domain.de (212.227.147.70): 56 data bytes
64 bytes from 212.227.147.70: icmp_seq=0 ttl=56 time=6083.883 ms
64 bytes from 212.227.147.70: icmp_seq=1 ttl=56 time=25.752 ms
64 bytes from 212.227.147.70: icmp_seq=2 ttl=56 time=27.006 ms
64 bytes from 212.227.147.70: icmp_seq=3 ttl=56 time=25.833 ms
64 bytes from 212.227.147.70: icmp_seq=4 ttl=56 time=27.001 ms
64 bytes from 212.227.147.70: icmp_seq=5 ttl=56 time=25.639 ms
64 bytes from 212.227.147.70: icmp_seq=6 ttl=56 time=26.474 ms
64 bytes from 212.227.147.70: icmp_seq=7 ttl=56 time=25.770 ms
64 bytes from 212.227.147.70: icmp_seq=8 ttl=56 time=26.690 ms
64 bytes from 212.227.147.70: icmp_seq=9 ttl=56 time=26.158 ms

--- www.beispiel-domain.de ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 25.639/632.021/6083.883/1817.288 ms

Also eigentlich alles was du willst.

Was ist denn bei dir genau anders?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Bitteschön;
Code:
return ping(10, "www.beispiel-domain.de")


on ping(num, hostname)
	set {pingtimes, min, avg, max, stddev} to paragraphs of (do shell script "ping -c " & num & " " & quoted form of hostname & " | perl -ne " & quoted form of "
		tr/./,/;
		if (/=(\\d+,\\d+)\\s*ms/) {
			print qq($1 );
		}
		elsif (m#(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)\\s*ms#) {
			print qq(\\n$1\\n$2\\n$3\\n$4\\n)
		}")
	set pingtimes to words of pingtimes
	repeat with i from (count of pingtimes) to 1 by -1
		set item i of pingtimes to item i of pingtimes as number
	end repeat
	return {pingtimes:pingtimes, min:min as number, avg:avg as number, max:max as number, stddev:stddev as number}
end ping
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Vielen Dank für die schnelle Hilfe!

Ja, Crashtron.
Hätte Ich einfach mal nachgedacht, ohne gleich zu posten...!
Ich sage immer "Nachgedacht ist halb gewonnen" :D

Das einzige, das mir an dieses Variante nicht gefällt ist, dass Ich nicht die Zahlen einzeln ausgeben kann.

Da hat mir das von Skeeve besser gefallen. Hier nochmal ein Dankeschön!
Und gleich die nächste Frage dazu:
Ich bekomme die Werte nicht in eine Variable geschrieben, die Ich hinterher noch auslesen kann.
Denn bei end ping werden alle Variablen gelöscht, die in diesem "On" drin stehen.

Habs mal versucht, folgender maßen aus zu schleusen:
Code:
return ping(4, "www.beispiel-domain.de")


on ping(num, hostname)
	set {pingtimes, min, avg, max, stddev} to paragraphs of (do shell script "ping -c " & num & " " & quoted form of hostname & " | perl -ne " & quoted form of "
		tr/./,/;
		if (/=(\\d+,\\d+)\\s*ms/) {
			print qq($1 );
		}
		elsif (m#(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)\\s*ms#) {
			print qq(\\n$1\\n$2\\n$3\\n$4\\n)
		}")
	set pingtimes to words of pingtimes
	repeat with i from (count of pingtimes) to 1 by -1
		set item i of pingtimes to item i of pingtimes as number
	end repeat
	return {pingtimes:pingtimes, min:min as number, avg:avg as number, max:max as number, stddev:stddev as number}
end ping
set Auto to avg of ping
display dialog Auto
Aber darauf wird garnicht erst reagiert.


Also, in der Hoffnung auf die Lösung meines Problems & Danke
Mini-Leo
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Du hast noch nie einen Handler verwendet, oder?

Code:
set ergebnis to ping(4,"www.beispiel-domain.de")
Mit
Code:
avg of ergebnis
bekommst Du z.B. den Mittelwertt.

Also zusammen so:
Code:
on run
    set ergebnis to ping(4, "www.beispiel-domain.de")
    display dialog avg of ergebnis
end run

on ping(num, hostname)
	set {pingtimes, min, avg, max, stddev} to paragraphs of (do shell script "ping -c " & num & " " & quoted form of hostname & " | perl -ne " & quoted form of "
		tr/./,/;
		if (/=(\\d+,\\d+)\\s*ms/) {
			print qq($1 );
		}
		elsif (m#(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)/(\\d+,\\d+)\\s*ms#) {
			print qq(\\n$1\\n$2\\n$3\\n$4\\n)
		}")
	set pingtimes to words of pingtimes
	repeat with i from (count of pingtimes) to 1 by -1
		set item i of pingtimes to item i of pingtimes as number
	end repeat
	return {pingtimes:pingtimes, min:min as number, avg:avg as number, max:max as number, stddev:stddev as number}
end ping
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Soooo...!
Alles funktioniert bestens!

Nein - Handler habe Ich noch nicht oft benutzt.
Dankeschön für die Hilfe!

Nichts anderes hatte Ich gesucht!