Datum mittels argparser aufrufen

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
peacemaker
User
Beiträge: 16
Registriert: Sonntag 2. Oktober 2016, 14:33

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
Zuletzt geändert von Anonymous am Mittwoch 16. November 2016, 21:59, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
 
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.
peacemaker
User
Beiträge: 16
Registriert: Sonntag 2. Oktober 2016, 14:33

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
BlackJack

@peacemaker: Du kannst Dir von dem `datetime.datetime`-Objekt das Datum als `datetime.date`-Objekt geben lassen.
Antworten