Hallo,
ich würde gerne mit einen Python-Script all' meine Netzwerkverbindungen disablen bzw. enablen (Windows 10). Der Grund hierfür ist, dass, wenn meine Verbindung zum Server wegbricht, von meiner Software immer versucht wird den Server irgendwie zu erreichen. Dies führt dann dazu, dass mein Programm defacto in einen Freeze-Zustand geht. Wenn ich alle Verbindungen beende, kann ich mit meiner lokalen Datenreplikation weiterarbeiten.
Hat jemand hierfür eine Idee? Ich habe bisher nur Beispiele über subprocess und os gefunden. Aber in den Beispielen wurde immer nur das WLAN disabled. Ich weiß aber erst mal nicht ob der Rechner über LAN oder WLAN verbunden ist...
Kann mir jemand hierfür Hilfestellung geben? Vielen Dank schon mal im Voraus.
Netzwerkverbindung beenden
Wuerde ich aber tatsaechlich ueber os bzw. besser subprocess machen. Siehe zB https://superuser.com/questions/1689648 ... windows-10 - wenn du das mit echten win32 API calls machen willst, hast du eine *Menge* Arbeit vor dir.
-
- User
- Beiträge: 53
- Registriert: Donnerstag 15. April 2010, 20:34
DAnke schon mal.
Mit subprocess.check_output('wmic nic get name, index') erhalte ich ein <class 'bytes'>
b'Index Name \r\r\n0 Microsoft Kernel Debug Network Adapter \r\r\n1 Realtek PCIe GbE Family Controller \r\r\n\r\r\n'
aber hiermit kann ich jetzt nix anfangen. Denn ich müsste ja nun via strip() oder ähnlichem die unerwünschten Zeichen tilgen. Geht aber leider nicht, da strip() nicht auf ein bytes anwendbar ist.
Mit subprocess.check_output('wmic nic get name, index') erhalte ich ein <class 'bytes'>
b'Index Name \r\r\n0 Microsoft Kernel Debug Network Adapter \r\r\n1 Realtek PCIe GbE Family Controller \r\r\n\r\r\n'
aber hiermit kann ich jetzt nix anfangen. Denn ich müsste ja nun via strip() oder ähnlichem die unerwünschten Zeichen tilgen. Geht aber leider nicht, da strip() nicht auf ein bytes anwendbar ist.
- DeaD_EyE
- User
- Beiträge: 1244
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Encoding vorgeben, dann musst du nicht decodieren.
Hier mal ein Beispiel mit netsh.
Nachteil: Der Python-Interpreter muss dann mit Administrator-Rechten laufen. Ansonsten fehlt die Berechtigung.
WMIC ist veraltet.
Wenn man das vernünftig haben will, löst man das Problem bei der Ursache und trennt nicht einfach die Netzwerkverbindung.
Auch das Parsen der Ausgabe von Befehlen kann schon bei unterschiedlichen Sprachen und Versionen zu Problemen führen.
Unter Linux bekommt man von bestimmten Tools eine Warnung, dass man das Parsen der Ausgabe unterlassen sollte, da sich die Ausgabe auch mal beim nächsten Update verändern kann.
Hier mal ein Beispiel mit netsh.
Code: Alles auswählen
import time
import subprocess
def get_interfaces():
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
stdout = subprocess.check_output(["netsh", "interface", "show", "interface"], encoding="utf8", startupinfo=si)
return [stripped_line.split(maxsplit=3)[-1] for line in stdout.splitlines()[3:] if (stripped_line := line.strip())]
def _interface(name, action):
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
return subprocess.call(["netsh", "interface", "set", "interface", f'name={name}', f"admin={action}"], startupinfo=si) == 0
def disable_interface(name):
return _interface(name, "disable")
def enable_interface(name):
return _interface(name, "enable")
for nic in get_interfaces():
print(nic)
if "eth" in nic.lower():
print(" >>> Deaktiviere", nic)
disable_interface(nic)
time.sleep(5)
print(" >>> Aktiviere", nic)
enable_interface(nic)
WMIC ist veraltet.
Code: Alles auswählen
C:\Windows\system32>wmic
wmic:root\cli>?
? - Alias wurde nicht gefunden.
wmic:root\cli>help
help - Alias wurde nicht gefunden.
wmic:root\cli>/?
WMIC ist veraltet.
[Globale Parameter] <Befehl>
...
Auch das Parsen der Ausgabe von Befehlen kann schon bei unterschiedlichen Sprachen und Versionen zu Problemen führen.
Unter Linux bekommt man von bestimmten Tools eine Warnung, dass man das Parsen der Ausgabe unterlassen sollte, da sich die Ausgabe auch mal beim nächsten Update verändern kann.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server