gpt4 book ai didi

python - Scons 在不同的子目录中运行 py.test

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:28 25 4
gpt4 key购买 nike

我们有一个包含多个 Python 包的大型存储库 (*)。我希望 scons 运行 py.test在每个子目录中,而不是在项目根目录中。事实证明这相当令人沮丧。目前,我执行此操作并删除了所有错误检查:

def runTests (target = None, source = None, env = None):
cmd = which(env['TEST_RUNNER'])
if cmd:
retCode = True
for path in env['TEST_DIR_LIST']:
print 'Doing directory %s:' % (path)
retCode = retCode and subprocess.call([cmd], cwd=path)
env.Exit(retCode)

我在 SConstruct 文件中调用它:

runTestsCmd = env.Command('runTests', None, Action(runTests, "Running tests"))
AlwaysBuild(runTestsCmd)
Alias('test', runTestsCmd)

在每个 SConscript 文件中,我都有这个:

env.Append(TEST_DIR_LIST = ['PackageDirectory'])

我得到的是,只有一个 py.test 实例运行。我可以看到“正在执行目录 X”消息,但没有运行 py.test。

显然,需要不在 SConscript 中克隆环境,或者如果克隆了环境,请确保添加到 TEST_DIR_LIST 的操作发生在原始环境上。

所以,我的问题有两个:

  1. 这是做我想做的事情的明智方式吗?
  2. 如果是,我做错了什么?如果不是,我应该做什么

(*) 是的,我们正在考虑改变这一点。不,它不会很快发生,所以我确实需要上述内容。

最佳答案

问题出在这行:

retCode = retCode and subprocess.call([cmd], cwd=path)

subprocess.call 成功时返回 0(计算结果为 False)。您需要插入一个 not 或者进行适当的检查,如下所示:

retcode = subprocess.call([cmd], cwd=path)
if retcode != 0:
print ("failed ...")
break # or not break if you want to continue anyway

关于python - Scons 在不同的子目录中运行 py.test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com