1 Востаннє редагувалося ykozolup (30.11.2017 11: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 04:28:40)

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

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

python A.py

а ось так:

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

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

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

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

4 Востаннє редагувалося koala (30.11.2017 09: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

5

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

Можна просто операцію з файлами без subprocess.
open with і т д

6

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

ivan.hrytskiv написав:

Можна просто операцію з файлами без subprocess.
open with і т д

А розкажіть детальніше.

7

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

with open(os.path.join(Path, file_input), 'r') as f:
     filedata = f.read()
with open(os.path.join(Path, file_output), 'w') as file:
     file.write(filedata)

8

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

І яким же чином це вирішує поставлену задачу?

9

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

mydir:
  - test.py
  - A.py

Код test.py

import sys

sys.stdout = open('./output.txt', 'w')
sys.stdin = open('./input.txt', 'r')
import A

"І нікакіх домомучєній" :)

P.S: але у реальних проектах тре робити та'як у прикладі koala.