问题描述
我正在使用lcov,我想从覆盖率报告中排除一些文件/目录。
当我使用os.system()时:
os.system("lcov --remove build/unit_test_coverage.info \'*test*\' \'*mock*\' -o build/unit_test_coverage.info")
它排除了我所期望的文件/目录。
但是当我像这样使用subprocess.call()时:
subprocess.call(["lcov","--remove","build/unit_test_coverage.info","\'*test*\'","\'*mock*\'","-o","build/unit_test_coverage.info"])
不排除文件/目录。
有人知道为什么吗?
解决方法
subprocess.call
默认情况下不使用外壳程序,因此您无需转义或保护“ *”。这样做:
subprocess.call(["lcov","--remove","build/unit_test_coverage.info","*test*","*mock*","-o","build/unit_test_coverage.info"])
subprocess.call
的文档表示要查看Popen
的文档以查看参数如何工作。那里说只有在您还指定shell=True
并给它一个字符串作为第一个参数的情况下,才使用外壳程序。那里还有一个“注释”块来解释这些内容。