optparse Dateinamen als Parameter

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
ulrich1992
User
Beiträge: 42
Registriert: Montag 8. November 2010, 15:25
Wohnort: Braunschweig
Kontaktdaten:

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.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

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.
In specifications, Murphy's Law supersedes Ohm's.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
ulrich1992
User
Beiträge: 42
Registriert: Montag 8. November 2010, 15:25
Wohnort: Braunschweig
Kontaktdaten:

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:
Antworten