Seite 1 von 1

optparse und Argumentenliste...

Verfasst: Montag 22. Mai 2006, 07:37
von jens
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

Verfasst: Montag 22. Mai 2006, 13:38
von Leonidas
Statische und dynamische Anzahl von Parametern sind beide in der Dokumentation beschrieben.

Verfasst: Montag 22. Mai 2006, 23:12
von 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 ...

Verfasst: Dienstag 23. Mai 2006, 06:16
von jens
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 ...

Verfasst: Dienstag 23. Mai 2006, 10:46
von 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' ...

Verfasst: Dienstag 23. Mai 2006, 20:23
von Leonidas
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..