Seite 1 von 1
sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 06:06
von Toorms
Guten Morgen Community,
ich bin absoluter Python-Anfänger. Bin zwar in anderen Sprachen unterwegs, aber Python möchte ich mir nun auch mal aneignen. Für ein aktuelles kleines Projekt habe ich etwas vor, wo ich nun schon so viele verschiedene Methoden gelesen habe, aber keine geht wirklich auf meinen Fall ein.
Mein Fall: Ich möchte im Endeffekt einfach nur durch ein Argument eine Funktion aufrufen bzw. starten. Das ganze kann dann wie folgt aussehen in der Eingabe:
python3 script.py -shownetinfo
Code: Alles auswählen
def show_network_informations():
try:
print("This is Network")
except(RuntimeError, TypeError) as err:
print(str(err))
Das das ist meine Funktion, welche ich gerne aufrufen / starten möchte, wenn ich einfach nur
python3 script.py -shownetinfo zum Script-Start aufrufe. Wie muss denn nun der Rest meines Scripts (also eigentlich der Hauptteil) aussehen, damit es so läuft, wie ich es mir vorstelle. Ich hoffe man versteht mich ein wenig und ich erhalte hier ein wenig Hilfe.
Besten Dank und eine schöne Woche - bleibt gesund!
Toorms
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 07:06
von __deets__
Schau dir mal das Modul argparse an. Ist in der Standardbibliothek.
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 08:41
von __blackjack__
@Toorms: Vorher vielleicht ein Grundlagentutorial durcharbeiten, denn ich habe gerade Schwierigkeiten mir vorzustellen welches Problem man mit `sys.argv` und ``if`` haben könnte das auch ohne `argparse` zu lösen. Was man dazu wissen muss ist wie ``if`` funktioniert und die Grundoperationen auf Listen und ``==`` um Zeichenketten miteinander zu vergleichen. Insbesondere wenn man schon andere Programmiersprachen kennt, sollte das doch eigentlich keine all zu grosse Hürde sein. ``if``, einen Sequenztyp, Zeichenketten, und Vergleiche haben ja die meisten anderen Programmiersprachen auch.
In der Python-Dokumentation ist ein Tutorial enthalten.
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 10:56
von Toorms
Mahlzeit,
habe es nun so gelöst, oder ist das nicht die feine Art?
Code: Alles auswählen
import sys
if str(sys.argv[1]) == 'bla':
print('Arg Bla')
sys.exit()
else:
print("Wrong Arg")
Was mich noch wundert ist, wieso funktioniert das oben geschriebene beispielsweise mit "python main.py bla" aber mit "python3 main.py bla" nicht. Da kommt dann einfach nur eine leere Zeile.
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 11:26
von Sirius3
Leere Zeile kann nicht sein, da entweder ein Fehler ausgegeben wird, oder der Text im if- oder im else-Block.
Das sys.exit ist unnötig. sys.argv ist schon eine Liste von Strings, das in einen String umzuwandeln ist also unnötig.
Und wenn man kompliziertere Argumente und schöne Hilfe-Texte will, dann benutzt man argparse, weil es mächtiger ist.
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 12:07
von __blackjack__
Also bei mir funktioniert das mit ``python3`` wie erwartet:
Code: Alles auswählen
bj@s8n:~$ python3 forum20.py bla
Arg Bla
bj@s8n:~$ python3 forum20.py nicht-blah
Wrong Arg
bj@s8n:~$ python3 forum20.py # ohne argument
Traceback (most recent call last):
File "forum20.py", line 3, in <module>
if str(sys.argv[1]) == 'bla':
IndexError: list index out of range
Wenn es auch etwas externes sein darf zur Auswertung von Optionen und Argumenten, mag ich `click` auch ganz gerne.
Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 13:26
von Toorms
Doch, ich habe tatsächlich nur eine leere Zeile in Windows erhalten. In meiner Linux Umgebung habe ich das ganze noch nicht getestet. Installiert ist Python3.9 in der ganz normalen Standard-Installation. Ist auch halb so wild, die Fehler habe ich noch berichtigt.

Re: sys.args in If verwenden
Verfasst: Donnerstag 8. Oktober 2020, 13:39
von __blackjack__
@Toorms: Okay, das ist in einem venv, das ist sicher nicht die passende Umgebung um *irgendetwas* anderes als das Python des venv zum ausführen zu verwenden. venv bedeutet ja, dass das so Umgebungsvariablen wie PYTHONPATH gesetzt sind und das ``python3`` dann vielleicht schon an der Standardbibliothek des ``python`` vom venv verreckt bevor Dein Code überhaupt ausgeführt wird.
An dem Bild sehe ich jetzt übrigens nichts was man nicht auch per kopieren und einfügen als Text hier ins Forum stecken könnte. Klar, man kann die Zeichen nicht verschwommen darstellen, aber man hätte sie rauskürzen oder aus-x-en können.