2

Я написал очень простую программу на 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), вывод на терминал и файл журнала в режиме реального времени?

2 ответа2

1

Ну, один подход можно найти здесь

Это нужно использовать ключ -u для изменения режима буферизации самого питона, давая

python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt

Но это не решение для всех языков

1

Проблема в том, что PowerShell Tee-Object не сбрасывает поток вывода, а только ждет, пока источник сделает это, поэтому вы получите вывод в конце операции. Это по замыслу.

Вместо этого используйте этот синтаксис, чтобы записать вывод построчно:

python .\TestShell.py | ForEach-Object { Write-Host $_; $_} | Set-Content .\fileLog.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .