Ну, один подход можно найти здесь
Это нужно использовать ключ -u для изменения режима буферизации самого питона, давая
python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
Но это не решение для всех языков
Я написал очень простую программу на Python (на самом деле моя программа намного сложнее):
from time import sleep for i in range(10): print(i) sleep(1)
печатать цифры 0-9, 1 каждую секунду в течение 10 секунд. Я сохранил это какTestShell.py
Я могу запустить его в PowerShell, используя
python .\TestShell.py
который выводит правильно, 1 цифра каждую секунду. Однако я также хотел бы сохранить вывод в файле журнала. Я ожидал использовать Tee-Object
для этого
python .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
который принимает файл журнала как один параметр и неявно записывает в консоль без второго параметра. Однако теперь вывод не выводится, пока не будет запущена вся программа. То есть я ничего не вижу в течение 10 секунд, затем цифры 0-9 все сразу.
Есть ли способ запустить файл (Python), вывод на терминал и файл журнала в режиме реального времени?
Ну, один подход можно найти здесь
Это нужно использовать ключ -u для изменения режима буферизации самого питона, давая
python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
Но это не решение для всех языков
Проблема в том, что PowerShell Tee-Object
не сбрасывает поток вывода, а только ждет, пока источник сделает это, поэтому вы получите вывод в конце операции. Это по замыслу.
Вместо этого используйте этот синтаксис, чтобы записать вывод построчно:
python .\TestShell.py | ForEach-Object { Write-Host $_; $_} | Set-Content .\fileLog.txt