引数をオブジェクトargparse
に変換するために使用しようとしています。timedelta
私のプログラムは、ユーザーから提供された文字列を読み取り、datetime
後で使用できるようにさまざまなオブジェクトに変換します。filter_length
ただし、引数を正しく処理することはできません。私のコード:
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))#default filter length is 1 day.
プログラムを実行し1
、値として渡しtimedelta
ます (1 日だけにしたい):
> python program.py 2012-09-16 11:00am 1
しかし、次のエラーが表示されます。
>>> program.py: error: argument filter_length: invalid mkdelta value: '1'
値が無効な理由がわかりません。次のように、mkdelta 関数を単独で呼び出すと、次のようになります。
mkdelta(1)
print mkdelta(1)
戻り値:
datetime.timedelta(1)
1 day, 0:00:00
これはまさに私が探している値です。を使用してこの変換を適切に行う方法を理解するのを手伝ってくれる人はいますargparse
か?