sys.args in If verwenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Toorms
User
Beiträge: 5
Registriert: Donnerstag 8. Oktober 2020, 05:57

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Schau dir mal das Modul argparse an. Ist in der Standardbibliothek.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Toorms
User
Beiträge: 5
Registriert: Donnerstag 8. Oktober 2020, 05:57

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.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Toorms
User
Beiträge: 5
Registriert: Donnerstag 8. Oktober 2020, 05:57

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.

Bild
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten