Nun, ein Ansatz kann hier gefunden werden
Verwenden Sie die Option -u, um den Puffermodus von Python selbst zu ändern
python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
Dies ist jedoch keine Lösung für alle Sprachen
Ich habe ein sehr einfaches Python-Programm geschrieben (in Wirklichkeit ist mein Programm viel komplexer):
from time import sleep for i in range(10): print(i) sleep(1)
um die Ziffern 0-9, 1 jede Sekunde über 10 Sekunden zu drucken. Ich habe es als gespeichertTestShell.py
Ich kann es in Powershell laufen lassen
python .\TestShell.py
die korrekt ausgibt, 1 Sekunde pro Sekunde. Ich möchte jedoch auch die Ausgabe in einer Protokolldatei speichern. Ich hatte erwartet, das Tee-Object
für dieses zu verwenden
python .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
Dabei wird die Protokolldatei als ein Parameter verwendet und ohne einen 2. Parameter implizit in die Konsole geschrieben. Es wird jedoch jetzt keine Ausgabe gedruckt, bis das gesamte Programm ausgeführt wird. Das heißt, ich sehe für 10 Sekunden nichts, dann die Zahlen 0-9 auf einmal.
Gibt es eine Möglichkeit, eine (Python-) Datei auszuführen, die in Echtzeit an das Terminal und eine Protokolldatei ausgegeben wird?
Nun, ein Ansatz kann hier gefunden werden
Verwenden Sie die Option -u, um den Puffermodus von Python selbst zu ändern
python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt
Dies ist jedoch keine Lösung für alle Sprachen
Das Problem ist, dass die PowerShell Tee-Object
den Ausgabestrom nicht leert, sondern nur darauf wartet, dass die Quelle dies tut, sodass Sie die Ausgabe am Ende der Operation erhalten. Dies ist beabsichtigt.
Verwenden Sie stattdessen diese Syntax, um die Ausgabe Zeile für Zeile zu schreiben:
python .\TestShell.py | ForEach-Object { Write-Host $_; $_} | Set-Content .\fileLog.txt