Seite 1 von 1

optparse Dateinamen als Parameter

Verfasst: Freitag 21. März 2014, 12:15
von ulrich1992
Folgendes:
Ein Script soll aufgerufen werden können mit Befehlszeilen a la

Code: Alles auswählen

./test.py --irgendeinflag --nocheinflag meinedatei
Wobei die "Flags" optional sind.
Pflichtparameter ist nur die Datei.

Nun habe ich gelesen, dass es da das optparse-Modul gibt, was wesentlich komfortabler ist, als sys.argv manuell zu parsen.
Allerdings finde ich auf die Schnelle keine Möglichkeit, einen String-Parameter ohne Prefix (a la "--file" oder "-f") angeben zu können.

Re: optparse Dateinamen als Parameter

Verfasst: Freitag 21. März 2014, 12:27
von pillmuncher
optparse ist deprecated seit Python 2.7/3.2. Das ist das erste, was - rot hinterlegt - in der Doku dazu steht. Da steht auch, dass man statt dessen argparse nehmen soll. Und in der Doku zu argparse steht gleich zu Anfang ein Beispiel, das deine Frage beantwortet.

Übrigens gibt es auch ein Tutorial zu argparse.

Re: optparse Dateinamen als Parameter

Verfasst: Freitag 21. März 2014, 12:40
von mutetella
@ulrich1992:
Verwende argparse:

Code: Alles auswählen

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--any_flag', action='store_true')
_StoreTrueAction(option_strings=['--any_flag'], dest='any_flag', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('filename')
_StoreAction(option_strings=[], dest='filename', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('--any_flag my_filename.txt'.split()) 
Namespace(any_flag=True, filename='my_filename.txt')
>>> parser.parse_args('my_filename.txt'.split())
Namespace(any_flag=False, filename='my_filename.txt')
mutetella

Re: optparse Dateinamen als Parameter

Verfasst: Freitag 21. März 2014, 12:42
von ulrich1992
mutetella hat geschrieben:@ulrich1992:
Verwende argparse:

Code: Alles auswählen

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--any_flag', action='store_true')
_StoreTrueAction(option_strings=['--any_flag'], dest='any_flag', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('filename')
_StoreAction(option_strings=[], dest='filename', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('--any_flag my_filename.txt'.split()) 
Namespace(any_flag=True, filename='my_filename.txt')
>>> parser.parse_args('my_filename.txt'.split())
Namespace(any_flag=False, filename='my_filename.txt')
mutetella
Okay danke!
Ich hätte nur mal in die offizielle Python-Doku gucken müssen. :oops: