os.system 使用 lcov --remove 但 subprocess.call 不是

os.system working with lcov --remove but subprocess.call is not

我正在使用 lcov,我想从我的覆盖率报告中排除一些 files/directories。

当我使用 os.system():

os.system("lcov --remove  build/unit_test_coverage.info \'*test*\' \'*mock*\' -o build/unit_test_coverage.info")

如我所料,它排除了 files/directories。

但是当我像这样使用 subprocess.call() 时:

subprocess.call(["lcov", "--remove", "build/unit_test_coverage.info", "\'*test*\'", "\'*mock*\'", "-o", "build/unit_test_coverage.info"])

不排除files/directories

有人知道为什么吗?

默认情况下,

subprocess.call 不使用 shell,因此您无需转义或保护“*”。这样做:

subprocess.call(["lcov", "--remove", "build/unit_test_coverage.info", "*test*", "*mock*", "-o", "build/unit_test_coverage.info"])

subprocess.call say to look at the docs for Popen 的文档以查看参数如何工作。那里说 shell 仅在您还指定 shell=True 并给它一个字符串作为第一个参数时才使用。那里还有一个“注释”块来解释这些东西。