Это мой первый день написания кода на Python, и у меня трудные времена с некоторой автоматизацией.У меня есть программа (./main), которая принимает файлы .txt через перенаправление ввода ("./main <1.txt").Мне нужно запустить его с 1000 различными TXT-файлами (от 1.txt до 1000.txt) и использовать llvm для вывода объединенных данных покрытия кода в файл cover.txt.В bash следующие команды успешны для двух файлов: </p>
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 или при запуске из терминала.
Заранее спасибо за любую помощь;Я знаю, что это просто, но я потратил на это часы без удачи.
Редактировать: Попытка подхода Хенка:
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"'