2014-11-17 1 views
0

저는 SCons를 소프트웨어 구성 도구로 사용하고 있습니다. 제 3 자 소프트웨어를 untar하고 싶습니다.파이썬 : Scons : TypeError : __init __()은 정확히 4 개의 인수 (주어진 2 개)를 사용합니다.

def tarContentsEmitter(target, source, env): 
    import tarfile 
    sourceTar = tarfile.open(source[0].name,'r') 
    tarContents = sourceTar.getmembers() 
    tarFileContents = filter(lambda tarEntry: tarEntry.isfile(), tarContents) 
    newTargets = map(tarInfoToNode, tarFileContents) 
    sourceTar.close() 
    return (newTargets, source) 

def tarInfoToNode(tarInfoObject): 
    return File(tarInfoObject.name) 

def UnTar(target, source, env): 
    # Code to build "target" from "source" here 
    import tarfile 
    sourceTar = tarfile.open(source[0].name,'r') 
    sourceTar.extractall() 
    sourceTar.close() 
    return None 

def UnTarString(target, source, env): 
    """ Information string for UnTar """ 
    return 'Extracting %s' % os.path.basename 
    (str (source[0])) 

unTarBuilder = Builder(action=SCons.Action.Action(UnTar, UnTarString), 
       src_suffix='.tar.bz2', 
       emitter=tarContentsEmitter) 

env.Append(BUILDERS = {'UnTar' : unTarBuilder}) 
env.UnTar(source='curl-7.37.0') 

나는 다음과 같은 오류 받고 있어요 :

scons: Reading SConscript files ... 
TypeError: __init__() takes exactly 4 arguments (2 given): 
    File "/home/nikhil/mnt/work/trunk/SConstruct", line 100: 
    env.UnTar(source='curl-7.37.0.tar.bz2') 
    File "/usr/lib/scons/SCons/Environment.py", line 259: 
    return MethodWrapper.__call__(self, target, source, *args, **kw) 
    File "/usr/lib/scons/SCons/Environment.py", line 223: 
    return self.method(*nargs, **kwargs) 
    File "/usr/lib/scons/SCons/Builder.py", line 632: 
    return self._execute(env, target, source, OverrideWarner(kw), ekw) 
    File "/usr/lib/scons/SCons/Builder.py", line 553: 
    tlist, slist = self._create_nodes(env, target, source) 
    File "/usr/lib/scons/SCons/Builder.py", line 517: 
    target, source = self.emitter(target=tlist, source=slist, env=env) 
    File "/home/nikhil/mnt/work/trunk/SConstruct", line 75: 
    newTargets = map(tarInfoToNode, tarFileContents) 
    File "/home/nikhil/mnt/work/trunk/SConstruct", line 80: 
    return File(tarInfoObject.name) 
를이 내 SConstruct 파일의 조각 나는 그것을 할 UnTarBuilder을 사용하고 있는데 코드는 here

주어진 하나와 동일

나는 (내가 파이썬 사람이 아니에요)의 압축을 풉니 대상 및 ENV를 기대하지만 나는 그들이이 꽤 사소한 때문에 위에서 언급 한 링크에서 수정 한 것이기 때문에 내가 뭔가를 놓친 있는지 확실하지 않습니다 알고

+0

이것은 당신의 문제와 관련이 없다고 생각하지만'UnTarString' 함수는'os.path.basename'과'(str (source [0]))'사이에 개행 문자가 있습니다. 스크립트의 동작이 바뀔 것이라고 생각합니다. 당신은 아마 같은 줄에 놓아야합니다. – Kevin

답변

0

UnTar은 3 개의 인수를 사용하며 1 (소스) 만 전달하면 "대상"과 "env"도 전달해야합니다. 오류는 말한다 : 당신이 클래스의 인스턴스를 만들 때 압축을 푸 전화를 즉시 귀하의 경우 있도록

TypeError: __init__() takes exactly 4 arguments (2 given): 

__init__()()는 당신이 오류가 자동으로 호출된다.

아무튼 코드가 불완전합니다, "env"은 어디에서 왔습니까?

관련 문제