다른 인수로 인수를 argparse로 변환하고 싶습니다. 아이디어는 숫자 (일반적으로 float)를 전달하고이를 문자열 (일반적으로 float의 Fortran 표기법)로 변환하는 것입니다.argparse의 기본 인수에 대한 사용자 정의 유형 또는 동작
첫째, 나는 그것은 잘 작동 ... 내가 실제로 --xmin=
인수를 주면 사용자 정의 형
def FortranFloat(value):
vfloat = float(value)
vfloat = str(vfloat) + "d0"
return vfloat
parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=FortranFloat, default=-2.0)
args = parser.parse_args()
을 만들려고. 그렇지 않으면 -2.0
을 그대로두고 -2.0d0
으로 변환하지 않고 그대로 유지합니다. 그래서 저는이 기본값에게 내가 원하는 형식을 제공하기 쉬울 수 있다고 생각, 그래서 충돌과 같은 오류가 발생하기 때문에 '2.0d0'
에 의해 2.0
교체 ... 재미있는 것은,이 평가된다는 점이다
argparse.ArgumentError: argument --xmin=: invalid FortranFloat value: '-2.0d0'
이 문제를 해결하기 위해 사용자 지정 작업을 만들려고했습니다.
class FortranConverter(argparse.Action):
def __call__(self, parser, namespace, values, option_strings=None):
if type(values) is float:
values = str(values) + "d0"
setattr(args, self.dest, values)
parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=float, default=-2.0, action=FortranConverter)
args = parser.parse_args()
그 중 하나도 작동하지 않았습니다. 내 작업을 수행하는 것조차 보이지 않습니다. (__call__
에있는 내용을 인쇄하면 그냥 무시할 것입니다).
어떤 생각, 아이디어 또는 설명 감사하겠습니다!
단순히 '-2.0'을 넣는 것이 효과적이며 '-2.0d0'과 반대되는 것은 유형 충돌이 없기 때문입니다. 'nargs = 0' 것은 사용자 정의 액션과 관련된 질문을 너무 빠르게 읽었 기 때문입니다 (실제로 인자가없는 경우). – MBR