Задать вопрос
@alekssamos
Программист любитель

Как автоматизировать консольную программу?

Есть консольная программа, которая при запуске ожидает ввод (нажатие цифры) и Enter. Т ихий режим не работает, ошибка конфигурации. Можно ли её автоматизировать?
Как правильно написать? Я представляю это так
import time
# ...
h = process.open("progname")
time.sleep(10)
h.write("2\n")
time.sleep(30)
h.write("1\n")
sleep(5)
h.close()
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@alekssamos Автор вопроса
Программист любитель
from subprocess import Popen, PIPE, STDOUT
fil = "\n" * 10
p = Popen(['python', 'prog.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
p.communicate("1\n2" + fil)[0]

Если будет ещё запрос (input), а он ничего не вернёт, то вылетит EOFError, так что я сделал переменную fil.
И оказывается он при таком запуске ничего не ждёт.
Кажется работает.
Только нужно точно расчитать сколько данных будет запрашиваться.
Если не работает, добавляем shell=True.
p = Popen(['python', 'prog.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT, shell=True)

Но всё равно при длительном взаимодействии: вопрос1 - ответ1, вопрос2 - ответ2 ... EOFError возникает и никак не получается взаимодействовать построчно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Soska_VLG
Попробуйте использовать schedule
https://schedule.readthedocs.io/en/stable/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы