1 Востаннє редагувалося ykozolup (30.11.2017 12:37:59)

Тема: Зчитування з файлів

Нехай ми маємо просту програму:

a=int(input())
b=int(input())
print(a+b)

Вона створена в файлі A.py.
Нехай є файл input.txt (в ньому знаходяться вхідні данні)
Треба написати програму, яка буде передавати дані з input.txt в файл A.py, а вихідні данні (print(a+b)) виводити в файл output.txt.
!!!Змінювати файл A.py не можна!
Допоможіть будь ласка вирішити таку задачку))))

2

Re: Зчитування з файлів

ykozolup написав:

Нехай ми маємо просту програму:

a=int(input())
b=int(input())
print(a+b)

Вона створена в файлі A.py.
Нехай є файл input.txt (в ньому знаходяться вхідні данні)
Треба написати програму, яка буде передавати дані з input.txt в файл A.py, а вихідні данні (print(a+b)) виводити в файл output.txt.
!!!Змінювати файл A.py не можна!
Допоможіть будь ласка вирішити таку задачку))))

Ем...
Читати файл input.txt -> Виконати A.py з передачею данних туди ?

3 Востаннє редагувалося P.Y. (30.11.2017 05:28:40)

Re: Зчитування з файлів

Взагалі, це задача в один рядок для оболонки операційної системи. Тобто, якщо програму запустити не просто

python A.py

а ось так:

python A.py <input.txt >output.txt

то вона зробить саме те, що нам треба. Якщо задача стоїть саме в тому, щоб написати програму на пітоні, яка робить ці елементарні дії за нас, то можна використати функцію os.system, якій передати цей рядок з інструкціями.

(Насправді все трохи складніше: принаймні на Windows може виникнути проблема, що input() не читає з перенаправленого потоку, а призводить до помилки й виходу з програми. Тому замість input(), щоб гарантовано мати змогу використовувати перенаправлення вводу, краще використовувати, наприклад, sys.stdin.readline(), але, якщо змінювати A.py заборонено, то навіть і не знаю...).

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: koala, leofun012

4 Востаннє редагувалося koala (30.11.2017 10:29:45)

Re: Зчитування з файлів

Для цього існує subprocess:

from subprocess import Popen, PIPE
with open('input.txt', 'r') as in_file, open('output.txt','w') as out_file:
    process = Popen(["python", "a.py"], stdin=PIPE, stdout=PIPE)
    (output, err) = process.communicate(input=in_file.read())
    out_file.write(output)
    exit_code = process.wait()

І назву теми виправіть, до тестування (unittest) це не має стосунку, а якщо й має, то про це треба окремо писати.

Подякували: leofun01, ykozolup2