Forum: PC-Programmierung übergabe von Parameter Python


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.