Ich habe ein kleines Problem bei meiner Funktion. Diese ist dafür da, die Internet-Verbindung zu überprüfen anhand eines pings. "Jedoch merkt Subprocess nicht immer, dass ein Ping möglich ist", soll heissen meine Funktion liefert mir False, obwohl eine Internet Verbindung existiert. Dieses Problem habe ich nur sporadisch! Wenn aber, dann häuft es sich gleich 2,3 mal hintereinander...
Es sieht wie folgt aus:
Ich reboote mein Modem, mache eine kleine Pause, danach checkt meine Funktion (isConnectionAvailable()) ob ich wieder eine Internetverbindung habe. Diese Überprüfung läuft 5x in einer Schleife, jeweils mit einem wait von 10sec. Manchmal geschieht es nun, dass die isConnectionAvailable() Funktion sagt dass keine Verbindung möglich ist, danach wird das Modem erneut rebootet, pause, und wieder die isConnectionAvailable() Funktion (5x), dieses mal geht der check jedoch wieder problemlos...sprich bekomme ein True und alles ist gut..
Das Lustige ist aber, wenn die isConnectionAvailable() Funktion ein paarmal False liefert nach dem 1. rebooten (eben die 5x versuche) und ich in dieser Zeit von Hand ein ping www.google.com mache in einer cmd, geht es auch nicht. ABER wenn ich in dieser Zeit den Firefox öffne, habe ich eine Verbindung zum Internet und gleich DANACH geht auch der ping check in der Funktion isConnectionAvailable()...
Daher meine Vermutung dass ich einen Fehler in meinem Subprocess habe, irgendwie bin ich wohl abgekappslet von der realen Systemwelt, bzw. bin "gefangen" im Sub process der nichts neues akzeptiert...brauche ich noch ein terminate()? system, etc. läuft alles unter python 2.5 leider... aber wie gesagt.. das Problem habe ich ja nicht immer...
Sorry für den langen text.. kanns nicht einfacher beschreiben.. hoffe ihr versteht mich...
danke für eure hilfe, tipps, ...
p.s. weiss das mein ping text find auf "Zielhost" nicht sauber ist, aber solch einen Fehler kann ich (bisher) nicht anders herausfinden...
system:
windows xp, sp2
python 2.5
code:
Code: Alles auswählen
def isConnectionAvailable():
"""
@return: True if the internet connection is ok, otherwise False
"""
returnBool = False
try:
retval = subprocess.call('ping www.google.com', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if retval == 0:
pipe = subprocess.Popen(('ping', 'www.google.com'), stdout=subprocess.PIPE)
pingText = pipe.stdout.read()
pipe.wait()
if (pingText.find("Zielhost nicht erreichbar") > -1):
returnBool = False
else:
returnBool = True
else:
returnBool = False
except subprocess.CalledProcessError:
returnBool = False
except EnvironmentError, err:
print "error while pinging:", err
returnBool = False
return returnBool