Я хочу сохранить вывод программы (stdout) в файл, но при этом иметь возможность видеть вывод на экране в реальном времени.
Мне нужны решения как для Linux, так и для Windows.
В Linux вы можете использовать tee
утилита.
В Windows PowerShell содержит tee
командлет. Для cmd
, вам нужно будет загрузить и установить отдельный утилита.
Linux: command | tee logfile
Windows: установите cygwin, затем запустите: command | tee logfile
В Linux и подобных системах:
program | tee filename
В tee
программа отправляет все, что попадает на стандартный ввод, на стандартный вывод (например, cat
), а также записывает его в указанный файл.
Другой способ получить тот же эффект -
program >filename 2>/dev/null &
tail -f filename
Это запускает программу в фоновом режиме, перенаправляя ее стандартный вывод в файл, а затем tail -f
позволяет отслеживать данные, записываемые в файл в реальном времени (или почти так, может быть, с задержкой в доли секунды). В 2>/dev/null
заставляет стандартный поток ошибок исчезать, чтобы он не мешал выводу tail -f
.
Для Windows вы можете сделать это:
dir> directory.txt и введите directory.txt
где бы вы заменили dir
по вашему приложению.
Если вывод прокручивается слишком быстро, используйте:
dir> c: \ directory.txt & введите c: \ directory.txt | Больше
Однако я не думаю, что это позволит отображать содержимое файла в реальном времени. Вам придется подождать, пока процесс не завершится.
В Windows вы можете использовать tee
если вы загрузите GnuWin32 его версия. Это то же самое, что и приложение для Linux, и происходит от пакет coreutils.
Однако одно предостережение: tee
имеет собственный код возврата, поэтому вы не сможете заметить ошибки из процесса, переданного по конвейеру (если вы не работаете в Linux, есть способы обойти это).