argparse
을 사용하여 인수를 timedelta
개체로 변환하려고합니다. 내 프로그램은 사용자가 제공 한 문자열을 읽고 나중에 사용하기 위해 다양한 datetime
개체로 변환합니다. 그래도 filter_length
인수를 올바르게 처리 할 수 없습니다. 내 코드 : timedelta
값으로 1
을 전달 내가 프로그램을 실행Python argparse : 인수에서 timedelta 객체를 만드시겠습니까?
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.
는, (나는 단지 그것을 언젠가되고 싶은) :
> 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
을 사용하여 올바르게이 변환을 수행하는 방법을 알아낼 수 있습니까?
그러나이 기능은 작동하지만 날짜를 함수에만 지정할 수 있습니다. 실제로는 전체 timedelta 표기법을 지원하지 않습니다. ([days [, seconds [, microseconds [, milliseconds [, minutes [, hours [, weeks]]]]]]). 나는 datetime 값의 전체 범위를 인수로 전달할 수 있어야합니다. 그 일을 어떻게 하죠? – user1675914
텍스트 형식을 고안하거나 여러 명령 줄 스위치를 사용한 다음이를 timedelta 개체의 인수로 구문 분석해야합니다. –
왜 전체 timedelta 표기법을 지원해야합니까? 귀하의 요구 사항에서 당신은 하루 부분 만 필요하다고 말합니다. 사용자가 더 많은 플래그를 지정하게하려면 nargs = '?'를 전달해야합니다. 이렇게하면 mkdelta는 나머지 인수가있는 문자열을받습니다. –