Guten Abend,
danke mal für die schnellen, zahlreichen Antworten und Tipps. Viel Input... puh.
Also ich wollte nicht den ganzen Code posten. Das wären 186 Zeilen gewesen, das ist nur ein Ausschnitt. Ich dachte das reicht, ich hätte das aber anders benennen sollen. sorry.
Der Vergleich mit is ist falsch. Woher kommen c_ip und start?
Man vermeidet Code-Wiederholungen. Es sollte nur einen input-Aufruf geben.
Fehler fängt man mit try ab.
Welches Programm besteht denn aus zwei zusammengesetzten Zahlen?
os.system benutzt man auch nicht, sondern subprocess.run.
Sinn des Programms ist das ich mir gewisse Netzwerkbefehle die ich im Terminal ausführe und die viele Optionen haben in einem Tool für mich zusammenfasse. Quasi ein kleiner Werkzeugkasten. Dann eben durch einfach Auswahl der Nummer in meinem Menü + Eingabe IP Adresse + eventuell Portnummer + eventuell IP Adressbereich usw. den jeweiligen Befehl starte.
Zum Beispiel: ping -I eth0 -s 100000 192.168.1.94
Gewöhn dir erst gar nicht an, kryptische Abkürzungen zu verwenden. Niemand weiß, was "c_ip" bedeutet. Auch du in 4 Tagen nicht mehr.
Das cp_ip kommt von c_ip = iptools.ipv4.validate_ip(ip) das mir prüft ob es eine gültige IP Adresse ist. Aber du hast sicher recht, das ist keine Gute Idee, Danke.
Warum nummerierst du Variablen durch? Wenn man das tut, will man eigentlich eine Liste verwenden.
Im richtigen Code haben die Variablen einen eindeutigen Namen. Das hab ich nur für den gekürzten Code geändert den ich hier gepostet habe.
Was soll der Aufruf von os.system? Warum willst du dort einen Systembefehl ausführen, der aus den Werten zusammgesetzt ist? Ist das wirklich so gewollt?
Zeichenketten setzt man nicht mit + zusammen sondenr verwendet String-Formatierung. Stichwort f-Strings.
Ja das ist so gewollt, da hier unterschiedliche Befehle ausgeführt werden die ich in Variablen gespeichert habe. f-Strings kenn ich nicht, werde ich mir mal zu Gemüte führen. Danke!
"nextone" sieht verdächtig so aus, als würdest du Funktionen als Sprungmarken verwenden. Wenn dem so ist, dann ist das falsch.
Wenn ich dich richtig verstehe dann mache ich das Falsch ja. Ja es ist quasi eine Sprungmarke die sagt... Befehl ausgeführt, enter drücken für menü und dann kommt das Menü wieder.
Den Prompt kann man `input()` als Argument übergeben, da braucht man kein Extra-`print()`.
ok, danke. Hab ich nicht gewusst.
`os.system()` sollte man nicht verwenden. Die Dokumentation verweist auf das `subprocess`-Modul.
Da hab ich bei der Google Suche immer beides gefunden zum Aufruf. Danke für den Hinweis. In Zukunft also subprocess.
Damit fällt auch ein Teil des zusammenstückelns von Zeichenketten und Werten mittels ``+`` und `str()` weg, was man in Python nicht macht. Dafür gibt es f-Zeichenkettenliterale. Und der andere Teil entfällt, weil man bei `subprocess.run()` die einzelnen Bestandteile nicht zu einer Zeichenkette zusammensetzt, die danach dann ja sowieso nur wieder von der Shell in Einzelteile zerlegt würden.
Die Umwandlung in str habe ich gemacht weil python gemeckert hat das er das eben nicht mit + zusammenbauen kann. Das + erschien mir irgendwie logisch um die einzelnen Teile zu verknüpfen. Also zum Beispiel.. Setze zusammen "Befehl mit Optionen" + "Datenmenge" + "Portnummer" + "IP Adresse"
Und wegen dem Anfängerstatus drängt sich bei der Funktion mit dem Namen so ein bisschen der Verdacht auf, dass da was falsch gemacht wird: rekursive Funktionsaufrufe dürfen nicht als missbrauch für Schleifen verwendet werden. Das skaliert nicht und führt irgendwann zu einer Ausnahme.
Ich versteh nur Bahnhof.

Aber danke ich hoffe das werde ich bald verstehen was du da meinst.
@blackjack - Danke für deine Mühe. Sieht schon mal gut aus. Ich bekomme noch einen Fehler beim subprocess. Aber ich weiß wo ich ansetzen muss.
100% python noob.