【问题标题】:Python: Scons: TypeError: __init__() takes exactly 4 arguments (2 given):Python:Scons:TypeError:__init__() 正好需要 4 个参数(给定 2 个):
【发布时间】:2014-11-17 14:02:39
【问题描述】:

我使用 SCons 作为软件构建工具。我想解压第 3 方软件。我正在使用 UnTarBuilder 执行此操作,代码与给定的 here 相同。

这是我的 SConstruct 文件的一部分:

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)

我知道 UnTar 需要 target 和 env,但我不确定我是否错过了其他内容,因为他们会在上面提到的链接中更正,因为这很简单(我不是 python 人)

【问题讨论】:

  • 我认为这与您的问题无关,但您的UnTarString 函数在os.path.basename(str (source[0])) 之间有一个换行符。我认为这会改变你的脚本的行为。您可能应该将它们放在同一行。

标签: python scons


【解决方案1】:

UnTar 接受 3 个参数,而您只传递 1 个(源),您还必须传递“target”和“env”。 错误说:

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

__init__() 在您创建类的实例时会自动调用,因此在您的情况下,只要您调用 UnTar() 就会收到该错误。

无论如何你的代码不完整,“env”从何而来?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多