TEST_RESULTS := ./result/* failures.txt: $(TEST_RESULTS) @rm -f $@ @for file in $^; do \ if grep -q 'This case is failed' $$file; then \ echo "Processing $$file..."; \ grep '{.*}' $$file >> failures.txt; \ fi; \ done执行这个命令的时候,提示make: execvp: /bin/sh: 参数列表过长 make: *** [Makefile:310:failures.txt] 错误 127怎么解决,请给出完整的命令更改
时间: 2023-11-22 10:56:48 浏览: 37
可以使用 xargs 命令来避免参数列表过长的问题,将命令改为如下:
```
TEST_RESULTS := ./result/*
failures.txt: $(TEST_RESULTS)
@rm -f $@
@echo "Processing test results..."
@grep -h '{.*}' $(TEST_RESULTS) | xargs -I {} sh -c 'if echo {} | grep -q "This case is failed"; then echo {} >> failures.txt; fi;'
```
这里使用 xargs 命令将多个文件的内容合并到一起,然后再使用 grep 进行筛选。注意,这里使用了 -h 参数来隐藏文件名,并使用 -I 参数指定占位符为 {},然后在 sh 命令中使用 if 条件语句来判断是否是失败的测试用例,如果是则将结果写入到 failures.txt 文件中。
相关问题
TEST_RESULTS := ./result/* failures.txt: $(TEST_RESULTS) @rm -f $@ @for file in $^; do \ if grep -q 'This case is failed' $$file; then \ echo "Processing $$file..."; \ grep '{.*}' $$file >> failures.txt; \ fi; \ done执行这个命令的时候,提示make: execvp: /bin/sh: 参数列表过长 make: *** [Makefile:310:failures.txt] 错误 127怎么解决
这个错误通常是由于参数列表过长导致的,可以尝试分批次执行命令,或者使用 xargs 命令来处理。可以将命令改为:
```
find ./result/ -type f -name "*.txt" -exec grep -q 'This case is failed' {} \; -print0 | xargs -0 grep '{.*}' >> failures.txt
```
这个命令使用 find 命令查找所有的 ".txt" 文件,并在每个文件中查找是否包含 "This case is failed" 字符串,如果包含则将文件名通过 xargs 命令传递给第二个 grep 命令进行匹配,最终结果输出到 failures.txt 文件中。这样可以避免参数列表过长的问题。
def lastcase_result(self): result = self._outcome.result if result.failures: last_result = result.failures[-1] elif result.errors: last_result = result.errors[-1] else: last_result = None return last_result 执行时@unittest.skipIf(lastcase_result(),"last_testcase is failed") 报错
这个错误可能是由于`lastcase_result()`方法返回类型不正确导致的。`@unittest.skipIf()`需要接受一个布尔类型的参数,但是`lastcase_result()`返回的是一个测试结果对象(比如`TestResult`)。你需要修改`lastcase_result()`方法,让它返回一个布尔值,表示最后一个测试用例是否失败。例如,你可以这样修改`lastcase_result()`方法:
```
def lastcase_result(self):
result = self._outcome.result
if result.failures:
last_result = result.failures[-1]
elif result.errors:
last_result = result.errors[-1]
else:
last_result = None
return last_result is not None
```
这样就能正确地使用`@unittest.skipIf()`了。