Python script sys index out of Range?
Hallo, ich möchte eine IP Adresse als String aus Node-RED an Python übergeben. Das wollte ich mit sys machen(siehe Bilder) jetzt wirft Python aber die ganze Zeit einen Fehler, obwohl es eigentlich aus „sys.argv[1]“ die IP Adresse kriegen müsste, oder fehlen da irgendwie Parameterübergaben oder so? Wenn ja wie funktioniert das? Weil den Namen vom Script, was immer „sys.argv[0]“ ist, kann er ausgeben….
Würde mich sehr über Hilfe freuen, bin gerade echt am verzweifeln…
LG Jonas
3 Antworten
Geht jetzt nicht direkt ums Thema aber..
ich hätte ich den Code noch einiges verkürzt um ein wenig Übersichtlichkeit zu schaffen:
alle Konstanten in eine Reihe,
das zweite print weg und eine neue Zeile mit eine Escape Sequenz machen "\n" ansonsten so:
f"""
Ich bin ein Text:
{IP}
{sys.argv}
Hier sparst du dir die Escape Sequenzen sofern du im Editor auch immer eine Zeile nach unten gehst.
"""
die imports in eine Reihe
sys.argv brauchst du eigentlich nicht extra in eine neue variable legen.
Und weil ich piki und Deutsch bin du hast "Phyton" geschrieben im ersten Bild auf dem ersten Task beim Ordner ist es sichtbar xD
sys.argv gibt dir die argumente die im terminal gegeben wurden.
diese fehlen bei dir.
List Index out of range bedeutet das der Platz in einer Liste nicht erreichbar ist.
Dementsprechend falls der User keine oder unzureichende Argumente angibt:
import sys
maxnr = 2
try:
for nr, i in enumerate(sys.argv):
chk = i #0 Ist IMMER der Dateipfad und Name
if nr == maxnr:
break
except:
print("Unzureichende Argumente!")
sys.exit()
Okay, also das einfach in meinen Code mit einbinden oder wie?
Das wird dein Kernproblem (fehlende IP) nicht beheben, denn darauf geht die Antwort nicht ein. Der Code oben iteriert lediglich über die verfügbaren Argumente, während du manuell auf sie zugreifst (was für deinen Fall auch die kürzere Methode ist). Das try-except ist unnötig, denn ein Fehlerfall wird nicht ausgelöst. Dazu müsste sys.argv erst auf einen Wert wie None verweisen.
Wenn du eine Sicherheitsabfrage einbauen möchtest, reicht eine einfache Verzweigung:
if len(sys.argv) < 2:
print("Ip not given!")
sys.exit()
ip = sys.argv[1]
die gebe ich eigentlich per Node Red(Siehe Bilder)