Probleme mit Popen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fl0
User
Beiträge: 11
Registriert: Donnerstag 11. März 2010, 18:52

Hallo zusammen,

ich habe ein paar Schwierigkeiten mit Popen... folgendes möchte ich tun:

Ich möchte den Befehl /usr/sbin/fping -c5 8.8.8.8 ausführen, was mir auf der Shell folgendes liefert:

Code: Alles auswählen

/usr/sbin/fping -C5 8.8.8.8
8.8.8.8 : [0], 96 bytes, 5.25 ms (5.25 avg, 0% loss)
8.8.8.8 : [1], 96 bytes, 4.39 ms (4.82 avg, 0% loss)
8.8.8.8 : [2], 96 bytes, 3.52 ms (4.38 avg, 0% loss)
8.8.8.8 : [3], 96 bytes, 2.95 ms (4.02 avg, 0% loss)
8.8.8.8 : [4], 96 bytes, 5.40 ms (4.30 avg, 0% loss)

8.8.8.8 : 5.25 4.39 3.52 2.95 5.40

Folgendes hab ich in python gemacht:

Code: Alles auswählen

#!/usr/bin/env python


import subprocess

output = subprocess.Popen(["/usr/sbin/fping", "-c8" ,"8.8.8.8"] , stdout=subprocess.PIPE).communicate()[0]
print "-------Hier beginnt die Scriptausgabe--------"
print output

Code: Alles auswählen

Die Ausgabe ist folgende:

python check_latency.py 

8.8.8.8 : xmt/rcv/%loss = 8/8/0%, min/avg/max = 3.00/5.84/9.51
-------Hier beginnt die Scriptausgabe--------
8.8.8.8 : [0], 96 bytes, 5.43 ms (5.43 avg, 0% loss)
8.8.8.8 : [1], 96 bytes, 4.08 ms (4.75 avg, 0% loss)
8.8.8.8 : [2], 96 bytes, 7.43 ms (5.64 avg, 0% loss)
8.8.8.8 : [3], 96 bytes, 3.53 ms (5.11 avg, 0% loss)
8.8.8.8 : [4], 96 bytes, 7.03 ms (5.50 avg, 0% loss)
8.8.8.8 : [5], 96 bytes, 9.51 ms (6.16 avg, 0% loss)
8.8.8.8 : [6], 96 bytes, 6.76 ms (6.25 avg, 0% loss)
8.8.8.8 : [7], 96 bytes, 3.00 ms (5.84 avg, 0% loss)
Das was ich eigentlich möchte ist diese Ausgabe:

Code: Alles auswählen

8.8.8.8 : xmt/rcv/%loss = 8/8/0%, min/avg/max = 3.00/5.84/9.51
die komischerweise auf stdout ausgegeben wird.....


Ich verstehe nicht ganz warum, da ich doch stdout auf PIPE gesetzt habe....

mfg fl0
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

fl0 hat geschrieben: Das was ich eigentlich möchte ist diese Ausgabe:

Code: Alles auswählen

8.8.8.8 : xmt/rcv/%loss = 8/8/0%, min/avg/max = 3.00/5.84/9.51
die komischerweise auf stdout ausgegeben wird.....
Sicher, dass das nicht in stderr steht? (Setze es testweise einfach auch auf PIPE).
fl0
User
Beiträge: 11
Registriert: Donnerstag 11. März 2010, 18:52

Ok das hab ich jetzt mal geändert, jetzt kommt die Ausgabe auch auf stdout nicht mehr...

Code: Alles auswählen

#!/usr/bin/env python

import subprocess

output = subprocess.Popen(["/usr/sbin/fping", "-c8" ,"8.8.8.8"] , stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
print "-------Hier beginnt die Scriptausgabe--------"
print output

Code: Alles auswählen

python check_latency.py 
-------Hier beginnt die Scriptausgabe--------
8.8.8.8 : [0], 96 bytes, 5.61 ms (5.61 avg, 0% loss)
8.8.8.8 : [1], 96 bytes, 4.69 ms (5.15 avg, 0% loss)
8.8.8.8 : [2], 96 bytes, 3.23 ms (4.51 avg, 0% loss)
8.8.8.8 : [3], 96 bytes, 3.50 ms (4.25 avg, 0% loss)
8.8.8.8 : [4], 96 bytes, 3.18 ms (4.04 avg, 0% loss)
8.8.8.8 : [5], 96 bytes, 3.45 ms (3.94 avg, 0% loss)
8.8.8.8 : [6], 96 bytes, 3.21 ms (3.83 avg, 0% loss)
8.8.8.8 : [7], 96 bytes, 4.11 ms (3.87 avg, 0% loss)
mfg fl0
fl0
User
Beiträge: 11
Registriert: Donnerstag 11. März 2010, 18:52

Habs gefunden, die Idee von dir war Richtig, nur das ich jetzt STDERR auf STDOUT geleitet habe... anstatt mit PIPE

Code: Alles auswählen

#!/usr/bin/env python

import subprocess

output = subprocess.Popen(["/usr/sbin/fping", "-c8" ,"8.8.8.8"] , stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]
print "-------Hier beginnt die Scriptausgabe--------"
print output
print "-------Hier endet die Scriptausgabe--------"

Code: Alles auswählen

python check_latency.py 
-------Hier beginnt die Scriptausgabe--------
8.8.8.8 : [0], 96 bytes, 8.28 ms (8.28 avg, 0% loss)
8.8.8.8 : [1], 96 bytes, 3.08 ms (5.68 avg, 0% loss)
8.8.8.8 : [2], 96 bytes, 3.99 ms (5.11 avg, 0% loss)
8.8.8.8 : [3], 96 bytes, 2.90 ms (4.56 avg, 0% loss)
8.8.8.8 : [4], 96 bytes, 3.81 ms (4.41 avg, 0% loss)
8.8.8.8 : [5], 96 bytes, 3.71 ms (4.29 avg, 0% loss)
8.8.8.8 : [6], 96 bytes, 3.65 ms (4.20 avg, 0% loss)
8.8.8.8 : [7], 96 bytes, 3.07 ms (4.06 avg, 0% loss)

8.8.8.8 : xmt/rcv/%loss = 8/8/0%, min/avg/max = 2.90/4.06/8.28

-------Hier endet die Scriptausgabe--------
Danke für den Tipp!!
mfg fl0
lunar

Wenn Du nur an dieser Zeile interessiert bist, reicht es doch, einfach nur stderr umzuleiten:

Code: Alles auswählen

output = subprocess.Popen(["/usr/sbin/fping", "-c8" ,"8.8.8.8"], stderr=subprocess.PIPE).communicate()[1]
fl0
User
Beiträge: 11
Registriert: Donnerstag 11. März 2010, 18:52

Hallo,

Code: Alles auswählen

#!/usr/bin/env python

import subprocess

output = subprocess.Popen(["/usr/sbin/fping", "-c8" ,"8.8.8.8"] , stderr=subprocess.PIPE).communicate()[1]
print "-------Hier beginnt die Scriptausgabe--------"
print output
print "-------Hier endet die Scriptausgabe--------"
python check_latency.py
8.8.8.8 : [0], 96 bytes, 4.58 ms (4.58 avg, 0% loss)
8.8.8.8 : [1], 96 bytes, 2.86 ms (3.72 avg, 0% loss)
8.8.8.8 : [2], 96 bytes, 3.45 ms (3.63 avg, 0% loss)
8.8.8.8 : [3], 96 bytes, 4.37 ms (3.81 avg, 0% loss)
8.8.8.8 : [4], 96 bytes, 3.18 ms (3.68 avg, 0% loss)
8.8.8.8 : [5], 96 bytes, 3.66 ms (3.68 avg, 0% loss)
8.8.8.8 : [6], 96 bytes, 3.32 ms (3.63 avg, 0% loss)
8.8.8.8 : [7], 96 bytes, 3.32 ms (3.59 avg, 0% loss)
-------Hier beginnt die Scriptausgabe--------

8.8.8.8 : xmt/rcv/%loss = 8/8/0%, min/avg/max = 2.86/3.59/4.58

-------Hier endet die Scriptausgabe--------

ja da hast du recht Danke, funktioniert auch (verstehe zwar nicht was die Ausgabe auf STDERR zu suchen hat aber ok ...) .... nun hab ich aber nen anderes Probelm....

In output stehen alle Zeichen einzeln drin (sind 45 Einträge insgesamt), ich hätte da eine zusamenhängende Zeichenkette erwartet...
mfg fl0
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

fl0 hat geschrieben:In output stehen alle Zeichen einzeln drin (sind 45 Einträge insgesamt), ich hätte da eine zusamenhängende Zeichenkette erwartet...
Normalerweise ist die Ausgabe auch eine einzelne Zeichenkette. Verstehe ich es richtig, dass du stattdessen eine Liste von einzelnen Zeichen kriegst? Zeig das mal bitte im Detail.
BlackJack

@fl0: Da stimmt Deine Problembeschreibung aber nicht mit der gezeigten Ausgabe überein. Zwischen den beiden Markierungen für die Skriptausgabe wird eine zusammenhängende Zeichenkette ausgegeben. Wenn das eine Liste mit den Einzelbuchstaben wäre, würde die Ausgabe anders aussehen.
fl0
User
Beiträge: 11
Registriert: Donnerstag 11. März 2010, 18:52

Hallo,

war mein Fehler..... ich hatte output mit einer for Schleife ausgegeben, und da hab ich dann jedes Zeichen einzeln bekommen, gebe ich output komplett aus, dann habe ich eine zusammenhängende Zeichenkette.

Bleibt nur noch die Frage warum das auf STDERR steht.
mfg fl0
lunar

Diese Frage musst Du an den Entwickler von fping stellen.
Antworten