Forum: PC-Programmierung übergabe von Parameter Python


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Leon (Gast)


Lesenswert?

Hi, ich möchte in meinem Programm gerne mit Befehlen arbeiten. Also das 
man Parameter mitgeben kann und dann ein Bestimmter teil des Programmes 
ausgeführt wird. Hat hier jemand eine Idee? Folgend findet Ihr ein 
Beispiel um es evtl. besser zu verstehen was ich möchte.

Danke im voraus
Gruß Leon

./mein_script hallo
./mein_script tschüss

Wenn hallo mitgegeben wird: print("hallo")
wenn tschüss mitgegeben wird: print("tschüss")

von Thomas W. (goaty)


Lesenswert?

Mit "argparse" Bibliothek sollte es möglich sein.

von Daniel A. (daniel-a)


Lesenswert?

Gibt mehrere Möglichkeiten. z.B. Ein Argument Parser, oder direkt selbst 
die Argumente verarbeiten.

https://docs.python.org/3/library/argparse.html
https://docs.python.org/3/library/sys.html#sys.argv

von Thomas W. (goaty)


Lesenswert?

Stimmt, vermutlich reicht

import sys

for argument in sys.argv:
        print argument

von Vorname N. (mcu32)


Lesenswert?

Klassisch wäre der Weg mit strings / charactern und einer Art state 
machine "if wort then befehl xy" z.B.

Aber das wäre nicht sehr pythonic, da gibts bestimmt was schon nen modul 
für :)

von moeb (Gast)


Lesenswert?

Man sollte sich angewöhnen, bei Kommandozeilenparameter immer argparse 
zu verwenden. Siehe auch Posts von Thomas W. und Daniel A.

von Sheeva P. (sheevaplug)


Lesenswert?

Leon schrieb:
> Hi, ich möchte in meinem Programm gerne mit Befehlen arbeiten. Also das
> man Parameter mitgeben kann und dann ein Bestimmter teil des Programmes
> ausgeführt wird. Hat hier jemand eine Idee?

Für so etwas habe ich eine Standardlösung, die aus einem "Hauptprogramm" 
und dynamisch ladbaren Modulen in einem definierten Unterverzeichnis 
besteht.
1
for modulefile in os.listdir(MODULES_DIR):
2
    modulename, _ = os.path.splitext(modulefile)
3
    if modulename != '__pycache__':
4
        try:
5
            mod = import_module(modulename)
6
            mod.register(subparser, modulename)
7
        except:
8
            sys.stderr.write('while loading module "%s":\n'%(modulename))
9
            traceback.print_exc()
10
            sys.exit(-4)

HTH ;-)

von Leon (Gast)


Lesenswert?

Vielen Dank für die vielen und schellen Antworten.
Habe es mit dem sys.argv gemacht. Dort habe ich dann den 2 Wert 
ausgelesen und in einer If-Verzweigung verglichen.
Nochmal vielen dank für die Hilfe.
Gruß Leon

von Reno S. (schaffi)


Lesenswert?

moeb schrieb:
> Man sollte sich angewöhnen, bei Kommandozeilenparameter immer argparse
> zu verwenden. Siehe auch Posts von Thomas W. und Daniel A.

argparse hat den Vorteil, dass man Kommandozeilenargumente "benennen" 
kann. Man muss dann nicht alle Argumente an die Kommandozeile anfügen 
und die Reihenfolge spielt keine Rolle. Das hat etwas Ähnlichkeit mit 
den Keyword-Args (kwargs) bei Funktionen/Methoden.
Wenn man aber nur ein Argument übergeben will, ist das mit Kanonen auf 
Spatzen geschossen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.