簡體   English   中英

編寫Python腳本以自動化llvm代碼覆蓋率測試

[英]Writing Python script to automate llvm code coverage test

這是我使用Python進行編碼的第一天,我在自動化方面有些艱難。 我有一個程序(./main)通過輸入重定向(“ ./main <1.txt”)接收.txt文件。 我需要使用1000個不同的txt文件(從1.txt到1000.txt)運行它,並使用llvm將合並的代碼覆蓋率數據輸出到文件coverage.txt中。 在bash中,以下命令對兩個文件成功執行:

clang++ -fprofile-instr-generate -fcoverage-mapping main.cpp -o main
-LLVM_PROFILE_FILE="1.profraw" ./main < 1.txt
-LLVM_PROFILE_FILE="2.profraw" ./main < 2.txt
llvm-profdata merge -sparse 1.profraw 2.profraw -o main.profdata
llvm-cov show ./main -instr-profile=main.profdata main.cpp > coverage.txt

我的目標是在Python中編寫腳本並循環創建和合並所有.profraw文件。 我嘗試了以下方法的許多變體,但均未成功:

subprocess.call(["clang++", "-fprofile-instr-generate", "-fcoverage-mapping", "main.cpp", "-o", "main"])

i = 1
while i <= 1000:
    inputFilename = str(i) + ".txt"
    outputFilename = "\"" + str(i) + ".profraw\""
    llvmCommand = "LLVM_PROFILE_FILE="   
    cmd = [llvmCommand, outputFilename, "./main", "<", inputFilename]
    p = subprocess.Popen(cmd, shell=True)
    p.communicate()
    i += 1

我尚未進入合並步驟,因為這不會生成任何.profraw文件。 在Spyder中或從終端運行時,它也不會生成任何錯誤消息。

預先感謝您的任何幫助; 我知道這是基本的,但是我花了數小時沒有運氣。

編輯:嘗試Henk的方法:

i = 1
while i <= 1000:
    inputFilename = ''.join([str(i), ".txt"])
    outputFilename = ''.join(['"', str(i), '.profraw"'])
    llvmCommand = ''.join(["LLVM_PROFILE_FILE=", outputFilename])  
    cmd = [llvmCommand, "./main", "<", inputFilename]
    sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = sp.communicate()
    i += 1

這是我收到的錯誤(即使當我硬編碼絕對文件路徑時):

FileNotFoundError: [Errno 2] No such file or directory:
'LLVM_PROFILE_FILE="1.profraw"': 'LLVM_PROFILE_FILE="1.profraw"'

如果使用這種方法,則可以看到stdout和stderr中出了什么問題(如果有的話)。

sp = subprocess.Popen([executable, arg1, arg2], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = sp.communicate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM