У меня есть инструмент командной строки (на самом деле, несколько), который я пишу для оболочки в Python.
Инструмент обычно используется следующим образом:
$ path_to_tool -option1 -option2 > file_out
Пользователь получает вывод, записанный в file_out, и также может видеть различные сообщения о состоянии инструмента во время его работы.
Я хочу реплицировать это поведение, а также записывать stderr (сообщения о состоянии) в файл.
Что у меня есть:
from subprocess import call
call(['path_to_tool','-option1','option2'], stdout = file_out, stderr = log_file)
Это отлично работает, ИСКЛЮЧАЕТ, что stderr не записывается на экран. Я могу добавить код, чтобы, конечно, распечатать содержимое лог файла на экране, но тогда пользователь увидит его после того, как все будет сделано, а не пока оно происходит.
Чтобы повторить, желаемое поведение:
- использовать вызов() или подпроцесс()
- direct stdout в файл
- direct stderr в файл, а также записывать stderr на экран в реальном времени, как если бы инструмент был вызван непосредственно из командной строки.
У меня есть чувство, что у меня либо отсутствует что-то действительно простое, либо это намного сложнее, чем я думал... спасибо за любую помощь!
EDIT: это нужно только для работы с Linux.