Windows: Befehlszeilenumleitung in eine Textdatei bei gleichzeitiger Anzeige der Ausgabe

30

Ich schreibe ein C-Programm in Windows, meine printf-Aufrufe drucken in die Befehlszeile und ich weiß, dass ich all diese Ausgaben in eine Textdatei umleiten kann, indem ich Folgendes verwende:

myProgram.exe > mylog.txt

Ich möchte jedoch auch die Ausgabe sehen, die auf der Konsole gedruckt worden wäre, und alles in einer Textdatei protokollieren.

Gibt es eine Möglichkeit, dies zu tun? Ich dachte daran, die Protokolldatei mit tail zu überwachen.

user79397
quelle
Was ich manchmal getan habe, ist, ein anderes cmd-Eingabeaufforderungsfenster zu öffnen und wiederholt den Typ mylog.txt auszuführen (oder mylog.txt als Editor zu verwenden) und zu sehen, wie es sich entwickelt. T-Stück sieht wie ein großes zwar aus.
Barlop

Antworten:

19

Die Windows PowerShell verfügt über ein Tool, das dies ermöglicht, benannt teenach dem Unix-Tool, das dasselbe tut.

Alternativ gibt es Ports des Unix teefür Windows:

Lesmana
quelle
3
powershell ist ein toller tipp, vielleicht ist cmd nur für leute die noch nicht umgezogen sind! Die Verwendung von gnuwin32 ist besser als die Verwendung von unxutils, unxutils ist ziemlich alt. gnuwin32 ist neuer und hat wahrscheinlich auch alles in unxutils und hat viel mehr Dienstprogramme. wie an anderer Stelle erwähnt, hat gnuwin32 coreutils tee
barlop
Dasselbe funktioniert in CMDer, einem anderen Befehlszeilenprogramm von Drittanbietern.
Rauni
1
In dieser Antwort superuser.com/a/273112/213743 BaconBits weist darauf hin , dass die Powershell - T zeilenorientiert ist: es wird eine Zeile nicht ausgegeben Newline - Zeichen angetroffen werden „ bis ein End-of-Line - Charakter erreicht ist “. BaconBits schlägt vor, dass der Unix- Tee Inhalte immer sofort weiterleitet.
Buzz3791
8

Unter Windows kann ich mir nur Folgendes vorstellen:

myProgram.exe > mylog.txt & type mylog.txt

Dies basiert auf dem folgenden Befehl in Ihrer Frage - wenn in der Tat Sie die Ausgabe anhängen wollte mylog.txtdann Sie würde verwenden >>statt >, sondern typedie gesamte Protokolldatei ausdrucken würde, nicht nur , was angehängt worden war.

Wenn Sie die GnuWin32-CoreUtils herunterladen , können Sie dazu die Unix-Methode ( teeBefehl) verwenden:

myProgram.exe | tee mylog.txt

Dies schreibt die Ausgabe von myProgram.exe mylog.txtin die Konsole, zeigt sie jedoch gleichzeitig an. Wenn Sie nur anfügen möchten, mylog.txtkönnen Sie den -aParameter an tee übergeben.

Gaff
quelle
2
Die Tee-Lösung sieht viel besser aus. Die andere Sache, die Sie erwähnen, ist nicht gleichzeitig.
Barlop
1
@barlop - Ich stimme zu, die erste Lösung ist eine Art Workaround, da Sie sie in Windows nicht nativ ausführen können. Tee macht den Trick schön hier :)
Gaff
Vielen Dank für die Hilfe, aufgestimmt, mit Tee gehen, aber Lesmana bekam in ein paar Minuten früher, als er / sie Tee erwähnt :)
user79397
Wenn Sie "Typ" weglassen, wird die Datei im Standardeditor (Editor für mich) geöffnet, wenn die Aufgabe abgeschlossen ist.
Josh Stribling
0

Ich verwende Visual Studio Code und öffne die Protokolldatei von dort aus. Dadurch wird die Ansicht nahezu in Echtzeit aktualisiert, wenn sich die Protokolldatei ändert

Jaime Botero
quelle
0

Ich hatte gerade ein ähnliches Bedürfnis und benutzte Tail, wie es das OP vorschlug:

>C:\Temp\Commands_Log.txt (
START tail.exe -f C:\Temp\Commands_Log.txt

Some_Commands
Other_Commands

echo.
echo ALL DONE HERE!
echo.
echo IT IS NOW SAFE TO CLOSE THIS WINDOW!
)

Die Datei "> C: \ Temp \ Commands_Log.txt" erstellt die Protokolldatei und fügt die Ausgabe aller Befehle in (Klammern) hinzu.

Der erste Befehl in den Klammern sollte sein, den Schwanz zu starten, der in einem neuen Befehlsfenster geöffnet wird.

Die Echos am Ende sind für unbekannte Benutzer gedacht, um sie zu informieren, wenn alles vollständig ist.

DBADon
quelle