Seite 1 von 1

Datum mittels argparser aufrufen

Verfasst: Mittwoch 16. November 2016, 21:45
von peacemaker
Hallöchen,
ich bin gerade dabei mir ein kleine Script zu schreiben, in diesem wollte u.a. ein Datum per command line eingeben und dies auch wieder abfragen können, nachdem es auf die Formatierung überprüft worden ist.

Nun habe ich folgendes Problem: Die Überprüfung funktioniert, allerdings kann ich das Datum nachträglich mittels "args.endtermin" nicht mehr aufrufen, bzw. arg.endtermin ist leer - Warum ? :)

Code: Alles auswählen

#!/usr/bin/env python

import sys, argparse, datetime

#Globale Variablen
Version="1.1"
prog=sys.argv[0]

#Pruefe ob endtermin richtiges Datumsformat hat
def validate(e):
    try:
        datetime.datetime.strptime(e, '%Y-%m-%d')
    except ValueError:
        raise argparse.ArgumentTypeError(e + ' is not a proper date string')

def main():
    # input arguments
    parser=argparse.ArgumentParser()
    parser.add_argument("-e","--endtermin", help="angeben welchen Endtermin die Aufgabe hat", type=validate)
    
    args = parser.parse_args()
    
    #Testausgaben
    print(args.endtermin)


if __name__ == '__main__':
    main()
Mit freundlichen Grüßen
peacemaker

Re: Datum mittels argparser aufrufen

Verfasst: Mittwoch 16. November 2016, 22:03
von Sirius3
@peacemaker: `type` ist kein Validiere sondern gibt die Konvertierungsfunktion an.

Code: Alles auswählen

def validate(date):
    try:
        return datetime.datetime.strptime(dat, '%Y-%m-%d')
    except ValueError:
        raise argparse.ArgumentTypeError('%s is not a proper date string' % date)
 

Re: Datum mittels argparser aufrufen

Verfasst: Mittwoch 16. November 2016, 22:13
von BlackJack
@peacemaker: Benenne die `validate()`-Funktion mal in `convert()` um, vielleicht kommst Du dann ja drauf. ;-) (Und danach dann vielleicht einen etwas deutlicheren Bezeichner an dem man auch erkennt was *genau* die Funktion macht.

Re: Datum mittels argparser aufrufen

Verfasst: Mittwoch 16. November 2016, 22:21
von peacemaker
achso ja,
danke ich hab das return vergessen. Jetzt kann ichs aufrufen mit args.endtermin.
Ich erstell n Datetime objekt aus nem string .

Ich dachte

Code: Alles auswählen

return datetime.datetime.strptime(datum, '%Y-%m-%d')
Formatiert es auf YYYY-mm-dd , allerdings bekomm ich noch die Uhrzeit hintendran 00:00:00 da ich nur das Datum eingegeben habe.
Kann ich das bei der Konvertierung "beschneiden", dass ich letztendlich nur das Datum da stehen habe?

mit freundlichen Grüßen
peacemaker

Re: Datum mittels argparser aufrufen

Verfasst: Mittwoch 16. November 2016, 23:22
von BlackJack
@peacemaker: Du kannst Dir von dem `datetime.datetime`-Objekt das Datum als `datetime.date`-Objekt geben lassen.