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

optparse und Argumentenliste...

Beitragvon jens » Montag 22. Mai 2006, 07:37

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 22. Mai 2006, 13:38

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

Beitragvon BlackJack » Montag 22. Mai 2006, 23:12

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 23. Mai 2006, 06:16

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 ...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Dienstag 23. Mai 2006, 10:46

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' ...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 23. Mai 2006, 20:23

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder