【问题标题】:os.system working with lcov --remove but subprocess.call is notos.system 使用 lcov --remove 但 subprocess.call 不是
【发布时间】:2021-01-30 22:51:44
【问题描述】:

我正在使用 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"])

不排除文件/目录。

有人知道为什么吗?

【问题讨论】:

    标签: python bash subprocess os.system lcov


    【解决方案1】:

    subprocess.call 默认情况下不使用外壳,因此您不需要转义或保护“*”。这样做:

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

    subprocess.call 的文档说查看Popen 的文档以了解参数的工作原理。它说只有在您还指定shell=True 并给它一个字符串作为第一个参数时才使用shell。那里还有一个“注释”块来解释这些东西。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2011-09-07
      • 2019-03-23
      • 2015-05-20
      • 1970-01-01
      • 2020-04-18
      • 2018-08-17
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多