Как ввести значение через одну программу в другую? python
У меня есть 3 файла первый это файл .txt с тестами из которого мы должны брать значения при помощи третьей программы и подставлять их в файл номер 2 с кодом и выходные данные должны отправляться в файл 3, у меня получается их забирать, но как их отправить в файл 2 через файл 3(файл 2 и 3 это .py а 1 .txt
Как через core.py ввести в n=int(input()) в student.py тест из tests.txt

Ответы (2 шт):
Возможно, тут можно использовать subprocess:
В вашем случае, subprocess.run
from subprocess import run, PIPE
inputStr = 'Demo input to process...' # Как-то получается из tests.txt
solution = run(['python', 'student.py'], stdout=PIPE,
input=inputStr, encoding='ascii') # Запускаем файл
print(solution.stdout) # solution.stdout - вывод student.py
"Почти что" перевод этого ответа на Русский.
Для простого и ясного примера будем проверять возведение чисел от 1 до 100 во вторую степень. Тот функционал программы, который мы будем проверять должен быть выполнен, например, в виде функции main.
Файл teacher.py:
def main(s):
return int(s)**2
Файл student.py:
def main(s):
n = int(s)
result = n * n
return result
В файле tests.txt указаны числа от 1 до 100, по одному на каждую строку:
1
2
3
4
...
98
99
100
И, наконец, файл score.py:
teacher import main
student import main
with open('tests.txt') as f:
tests = f.read().split()
teacher_res = [teacher.main(i) for i in tests]
try:
student_res = [student.main(i) for i in tests]
except:
print('В процессе выполнения программы ученика произошла ошибка')
student_right = 0
for i in range(len(teacher_res)):
if teacher_res[i] == student_res[i]:
student_right += 1
result = student_right/len(teacher_res)*100
print(f'При проверке совпало {result}% ответов')
Это, конечно, не единственно верное решение. Его можно улучшить, например, добавив индикатор выполнения теста при помощи модуля tqdm или любого другого, можно сделать вывод результата в отдельный файл или даже выводить туда тесты, на которых произошла ошибка, можно выполнить эту же задачу совсем по-другому, например переписав всё в ООП стиле. Я считаю, что это решение одно из самых простых и его может быть достаточно.