I am trying to use argparse to convert an argument to a timedelta object. My program reads in strings provided by the user and converts them into various datetime objects for later use. I cannot get the filter_length argument to filter_length correctly. My code is:
import datetime import time import argparse def mkdate(datestring): return datetime.datetime.strptime(datestring, '%Y-%m-%d').date() def mktime(timestring): return datetime.datetime.strptime(timestring, '%I:%M%p').time() def mkdelta(deltatuple): return datetime.timedelta(deltatuple) parser = argparse.ArgumentParser() parser.add_argument('start_date', type=mkdate, nargs=1) parser.add_argument('start_time', type=mktime, nargs=1, ) parser.add_argument('filter_length', type=mkdelta, nargs=1, default=datetime.timedelta(1))
I run the program by passing 1 as the value of timedelta (I want it to be only one day):
> python program.py 2012-09-16 11:00am 1
But I get the following error:
>>> program.py: error: argument filter_length: invalid mkdelta value: '1'
I do not understand why the value is not valid. If I call the mkdelta function myself, for example:
mkdelta(1) print mkdelta(1)
It returns:
datetime.timedelta(1) 1 day, 0:00:00
This is exactly the meaning I'm looking for. Can someone help me figure out how to do this conversion correctly using argparse ?
source share