optparse und Argumentenliste...

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hätte gern, das ich folgendes machen kann:
MeinProgramm source dest -r -f filter1 filter2 filter3 ...
Mit dem -f klappt es so aber nicht wirklich. Für jeden neuen filter muß man wieder ein -f setzten, also so:
MeinProgramm source dest -r -f filter1 -f filter2 -f filter3 ...
Aber das ist doch etwas dumm...

Hier ein Code-Ausschnitt:

Code: Alles auswählen

    parser = optparse.OptionParser(usage=usage)

    parser.add_option("-v", "--version",
        dest="version",
        default=False,
        action="store_true",
        help="print program versions and exit")
    parser.add_option("-d", "--debug",
        dest="debug",
        default=False,
        action="store_true",
        help="Debug/verbose mode")
    parser.add_option("-r", "--recursive",
        dest="recursive",
        default=False,
        action="store_true",
        help="works recursive")
    parser.add_option("-f", "--filter",
        dest="fnFilters",
        default=[],
        action="append",
        help="fnmatch filter")

    (options, args) = parser.parse_args()
    print "Options:", options
    print "Args:", args

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Statische und dynamische Anzahl von Parametern sind beide in der Dokumentation beschrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Alternativ könnte man auch ein Zeichen zum Trennen der Parameter aussuchen und dann `str.split()` benutzen. Also zum Beispiel:

MeinProgramm source dest -r -f filter1,filter2,filter3 ...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

BlackJack hat geschrieben:MeinProgramm source dest -r -f filter1,filter2,filter3 ...
Das hatte ich mir auch schon überlegt. Das dumme ist nur, es klappt nicht sobald ein Leerzeichen drin vorkommt.

@Leonidas: Das beschriebene vorgehen mit einer callback-Funktion finde ich irgendwie umständlich... Komisch das soetwas noch nicht in optparse drin ist... Ist doch eigentlich nicht's ungewöhnliches, oder???

Eine dritte möglichkeit wäre noch, für jeden filter ein -f setzten zu lassen:
MeinProgramm source dest -r -f filter1 -f filter2 -f filter3 ...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

jens hat geschrieben:
BlackJack hat geschrieben:MeinProgramm source dest -r -f filter1,filter2,filter3 ...
Das hatte ich mir auch schon überlegt. Das dumme ist nur, es klappt nicht sobald ein Leerzeichen drin vorkommt.
Meinst Du absichtlich oder aus versehen? Wenn Du Leerzeichen absichtlich haben möchtest, dann musst Du halt in der Shell dafür sorgen, dass sie "escaped" sind, also zum Beispiel mit Anführungszeichen.

MeinProgramm source dest -r -f 'filter1,filter2,filter3 mit leerzeichen' ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:@Leonidas: Das beschriebene vorgehen mit einer callback-Funktion finde ich irgendwie umständlich... Komisch das soetwas noch nicht in optparse drin ist... Ist doch eigentlich nicht's ungewöhnliches, oder???
Optparse ist eben so (außerdem ist es ja drin, es geht mit einem Callback, also ist es drin). Es deckt die meisten Use-Cases ab, aber eben nicht jede mögliche Option.

Mit nichts zufrieden sein, tststs..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten