Я хочу запустить программу, дождаться ее вывода, отправить в нее входные данные и повторить до выполнения условия.
Все, что я мог найти, это вопросы о ожидании завершения программы, но это НЕ так.Процесс все еще будет запущен, он просто не даст никаких (новых) выходных данных.
Вывод программы осуществляется в стандартный вывод и в файл журнала, может использоваться любой из них.
Использование linux.
Код на данный момент:
import subprocess
flag = True
vsim = subprocess.popen(['./run_vsim'],
stdin=subprocess.pipe,
shell=true,
cwd='path/to/program')
while flag:
with open(log_file), 'r') as f:
for l in f:
if condition:
break
vsim.stdin.write(b'do something\n')
vsim.stdin.flush()
vsim.stdin.write(b'do something else\n')
vsim.stdin.flush()
Как есть,ввод «сделать что-то» отправляется несколько раз даже до завершения программы.Кроме того, файл журнала читается до того, как программа завершит выполнение команды из последней во время итерации.Это заставляет его буферизовать входные данные, поэтому я продолжаю выполнять команды даже после того, как условие выполнено.
Я мог бы использовать time.sleep
после каждого stdin.write
, но так как время, необходимое для выполнения каждой команды, является переменным, мне нужно было бы использовать время, превышающее необходимое, чтобы сделать скрипт Python медленнее.Кроме того, это глупое решение для этого.
Спасибо!