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를 기대하지만 나는 그들이이 꽤 사소한 때문에 위에서 언급 한 링크에서 수정 한 것이기 때문에 내가 뭔가를 놓친 있는지 확실하지 않습니다 알고
이것은 당신의 문제와 관련이 없다고 생각하지만'UnTarString' 함수는'os.path.basename'과'(str (source [0]))'사이에 개행 문자가 있습니다. 스크립트의 동작이 바뀔 것이라고 생각합니다. 당신은 아마 같은 줄에 놓아야합니다. – Kevin