Я пишу программу на Python 3.6 для Windows, чтобы записать все входные данные в подпроцесс для резервного копирования.(Я не могу изменить код подпроцесса, поскольку настоящая программа является коммерческим продуктом (exe-файл), и у меня нет исходного кода.)
Я попробовал следующий код, и он не работает.Текст отображается только в терминале, а текстовые файлы, используемые для регистрации, пусты.
Main.py :
import subprocess
import sys
class dup_stream():
def __init__(self, original_stream, file):
self.original_stream = original_stream
self.log = open(file, 'a')
def write(self, message):
self.log.write(message)
self.original_stream.write(message)
def fileno(self):
return self.original_stream.fileno()
completed_process = subprocess.run('python Hello.py',
stdin=dup_stream(sys.stdin, 'stdin.txt'),
stderr=dup_stream(sys.stderr, 'stderr.txt'),
stdout=dup_stream(sys.stdout, 'stdout.txt'))
Hello.py :
name = input("Your name:") # e.g. "Jane Doe"
print('Hello,',name)
Ожидаемый результат:
В терминале:
Your name: Jane Doe
Hello, Jane Doe
stdin.txt:
Jane Doe
stdout.txt:
Your name:
Hello, Jane Doe
Ранее я задавал более общий вопрос ( Захват входных данных в subprocess.run () ), но практического ответа не существует.