** Leiden Sie alle unter einem plötzlichen "kein Internetzugang"? ** **.
Ich war gestört. Ich habe ein Skript erstellt, um Routineaufgaben zu automatisieren und es auf einem alten PC zu speichern. Als ich den PC eingeschaltet ließ, befand ich mich in einem Zustand "kein Internetzugang", bevor ich es wusste, und ich musste das PC-Netzwerk manuell trennen und wieder verbinden. Es ist beängstigend, dass der Prozess stoppt, bevor Sie es wissen, obwohl er automatisiert und unbeaufsichtigt bleibt.
Daher habe ich versucht, den Netzwerkstatus zu überprüfen und die Verbindung im Skript wiederherzustellen, daher werde ich sie einführen.
(Ich weiß nicht, warum Sie überhaupt keinen Internetzugang haben. Bitte lassen Sie mich wissen, wer Sie sind.)
· Windows 7 ・ Anaconda3
Der Inhalt besteht hauptsächlich aus Windows-Befehlen, aber ich rufe die Befehle von Python aus auf, da sie Teil des Skripts sind.
def is_ping_ok():
proc = subprocess.run(["ping", "yahoo.co.jp"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ret = proc.stdout.decode("cp932")
if "Nicht gefunden" in ret:
return False
else: return True
def restart_network():
subprocess.run(["netsh", "wlan", "disconnect"])
subprocess.run(["netsh", "wlan", "connect", 'name="SSID, zu der Sie eine Verbindung herstellen möchten"'])
time.sleep(5)
def check_network():
if not is_ping_ok():
restart_network()
if is_ping_ok():
return "Restarted!"
else: return "Error"
return "OK"
Im Moment versuche ich es einmal und gebe auf, wenn es nicht zurückkommt, aber wenn du nicht gerne verlierst, kannst du gründlich zurückgehen, bis es zurückkommt.
Verwenden Sie den Befehl ping, um zu überprüfen, ob Sie über einen Internetzugang verfügen. Informationen zum plötzlich auftretenden Unterprozess finden Sie in diesem Artikel.
Das Folgende ist für den Internetzugang
>>> import subprocess
>>> proc = subprocess.run(["ping","yahoo.co.jp"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> print(proc.stdout.decode("cp932"))
yahoo.co.jp [182.22.59.229]32 Bytes Daten senden Ping an:
182.22.59.Antwort von 229:Anzahl der Bytes=32 Stunden=11ms TTL=50
182.22.59.Antwort von 229:Anzahl der Bytes=32 Stunden=16ms TTL=50
182.22.59.Antwort von 229:Anzahl der Bytes=32 Stunden=21ms TTL=50
182.22.59.Antwort von 229:Anzahl der Bytes=32 Stunden=21ms TTL=50
182.22.59.229 Ping-Statistiken:
Anzahl der Pakete:Senden=4 erhalten=4, Verlust= 0 (0%Verlust)、
Ungefähre Hin- und Rückfahrtzeit(Millisekunde):
Minimum=Maximal 11 ms=21 ms, durchschnittlich= 17ms
Ohne Internetzugang
>>> proc = subprocess.run(["ping","yahoo.co.jp"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> print(proc.stdout.decode("cp932"))
Host Yahoo in Ping-Anfrage.co.jp wurde nicht gefunden. Überprüfen Sie den Hostnamen und versuchen Sie es erneut.
Wenn der Rückgabewert "nicht gefunden" enthält, haben wir festgestellt, dass kein Internetzugang vorhanden ist. Ich denke, das hängt von der Sprache des Terminals ab.
def is_ping_ok():
proc = subprocess.run(["ping", "yahoo.co.jp"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ret = proc.stdout.decode("cp932")
if "Nicht gefunden" in ret:
return False
else: return True
Wenn Sie keinen Internetzugang haben, versuchen Sie, das Netzwerk mit dem folgenden Befehl erneut zu verbinden. Einzelheiten zum Befehl finden Sie in diesem Artikel.
> netsh wlan disconnect
Schnittstelle"WLAN-Verbindung"Trennungsanforderung erfolgreich abgeschlossen.
> netsh wlan connect name="SSID, zu der Sie eine Verbindung herstellen möchten"
Die Verbindungsanforderung wurde erfolgreich abgeschlossen.
Wenn es mit Python aufgerufen wird, ist es wie folgt. Ich lege den Schlaf ein, damit ich nicht zum nächsten Prozess übergehe, ohne die Verbindung herzustellen.
def restart_network():
subprocess.run(["netsh", "wlan", "disconnect"])
subprocess.run(["netsh", "wlan", "connect", 'name="SSID, zu der Sie eine Verbindung herstellen möchten"'])
time.sleep(5)
Ich stellte vor, wie man das plötzliche "kein Internetzugang" bekämpft.
Wir suchen einen intelligenteren Weg.
Recommended Posts