@Sempervivum: Ja, kann es. Nie Rekursion wenn es auch eine einfache Schleife tut in Programmiersprachen die keine „tail call optimization“ garantieren. Zudem ist die Funktion auch fehlerhaft, denn die kann ja auch `False` liefern wenn eine Verbindung besteht. Gut das der Rückgabewert nirgends verwendet wird. Oder schlecht, denn dann wäre das vielleicht mal aufgefallen.
Die Ausnahmebehandlung ist falsch. Das Äussere ``try``/``except`` kann so wie der Code jetzt strukturiert ist, im Grunde nie zum Zuge kommen, weil das alles vom inneren ``try``/``except`` verschluckt wird. Und weil das wirklich *alles* durch einfach ignorieren und noch mal versuchen abbügelt, hat man bei unerwarteten Ausnahmen, beispielsweise weil man sich bei einem Namen vertippt hat, ein Programm was einfach lautlos aber endlos immer weiter versucht etwas zu machen was vielleicht nie gehen wird, weil man einen Programmierfehler gemacht hat. Nackte ``except:`` ohne konkrete Ausnahme die man da behandeln will, sind keine gute Idee. Die einzigen sinnvollen Behandlungen für *alles* sind im Grunde ausführlich den Grund irgendwo zur Verfügung stellen, beispielsweise Ausnahme samt Traceback protokollieren, oder wenn man etwas aufräumt und dann die Ausnahme wieder auslöst, damit das an anderer Stelle sinnvoll behandelt werden kann.
Was auch zu einer Endlosschleife führen wird, ist wenn das externe Programm nicht gestartet werden kann. Warum auch immer. Neben der Umstellung von `subprocess.call()` auf `subprocess.run()` (siehe Dokumentation), sollte man `run()` dann mit ``check=True`` aufrufen, damit einem da keine Probleme lautlos durchrutschen.
Namen von Konstanten werden KOMPLETT_GROSS geschrieben. In `camelCase` wird in Python gar nix benannt. Nicht zu verwechseln mit PascalCase → Klassennamen.
`os` wird importiert, aber nirgends verwendet.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import socket
import subprocess
import time
JITSI_PATH = R"C:\Program Files\Sonstiges\Jitsi\Jitsi.exe"
SIP_URL = R"sip.provider.de"
def main():
while True:
try:
with socket.create_connection((SIP_URL, 5060)):
pass
except OSError:
time.sleep(10)
else:
subprocess.run([JITSI_PATH], check=True)
if __name__ == "__main__":
main()