У меня есть интерактивный исполняемый файл командной строки в Windows, написанный кем-то другим.Когда в программе возникает исключение, оно завершается, и все мои входные данные для программы теряются.
Итак, я пишу программу на python, которая вызывает блокирующий подпроцесс с subprocess.run()
и записывает все входные данные в stdin
для резервного копирования, не влияя на взаимодействие с подпроцессом.Но я не нашел способа получить входные данные.Как мне сделать это в Python?
Пример (но не работающий) кода будет выглядеть так:
import subprocess
process = subprocess.run(['program.exe'], stderr = subprocess.PIPE,text=True)
# Interact with the program. Wait for it to finish.
if subprocess_object.returncode != 0:
open('input_backup.txt','w').write(process.stdin) # Won't work
open('error_backup.txt','w').write(process.stderr)
Одна из идей, которые у меня были, - переопределить объект StringIO
и дать емудва потока, один sys.stdin
и один поток файлов до write()
до.Затем назначьте sys.stdin экземпляру этого переопределенного класса.Но я не нашел способа сделать это.