[英]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.