Windows: reindirizzamento della riga di comando al file di testo e allo stesso tempo visualizzazione dell'output


30

Sto scrivendo un programma C in Windows, il mio printf chiama print dalla riga di comando e so che posso reindirizzare tutto questo output su un file di testo usando:

myProgram.exe > mylog.txt

Tuttavia, desidero anche vedere l'output che sarebbe stato stampato sulla console e registrare tutto in un file di testo.

C'è un modo per fare questo? Stavo pensando di usare tail per monitorare il file di registro.


Quello che ho fatto a volte è aprire un'altra finestra del prompt cmd ed eseguire ripetutamente il tipo mylog.txt (o potrei fare il blocco note mylog.txt) e vedere come si sviluppa. tee sembra fantastico però.
barlop


Risposte:


19

Windows PowerShell ha uno strumento che può farlo, che prende il teenome dallo strumento unix che fa lo stesso.

In alternativa, ci sono porte di Unix teeper Windows:


3
PowerShell è un ottimo suggerimento, potrebbe essere cmd è solo per le persone che non sono ancora passate! Usare gnuwin32 è meglio che usare unxutils, unxutils è piuttosto vecchio. gnuwin32 è più recente e probabilmente ha anche tutto in unxutils e ha molte più utility. come menzionato altrove, gnuwin32 coreutils ha il tee
barlop

Lo stesso funziona in CMDer, un altro util della riga di comando di terze parti.
Rauni,

1
In questa risposta superuser.com/a/273112/213743 BaconBits sottolinea che il tee PowerShell è orientato alla linea: non emetterà una linea "fino a quando non viene raggiunto un carattere di fine linea" viene rilevato un carattere di nuova riga. BaconBits suggerisce che la t-shirt unix inoltra sempre immediatamente il contenuto.
buzz3791

8

Sotto Windows tutto ciò che posso pensare è fare questo:

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

Questo si basa sull'esempio di comando nella tua domanda: se in realtà volessi aggiungere l'output a mylog.txtcui vorresti usare >>invece di >, ma typestamperesti l'intero file di registro, non solo ciò che era stato aggiunto.

Se scarichi CoreUtils GnuWin32 , puoi usare il metodo Unix ( teecomando) per fare questo:

myProgram.exe | tee mylog.txt

Questo scriverà l'output di myProgram.exe mylog.txtma lo visualizzerà contemporaneamente sulla console. Se si desidera solo aggiungere, mylog.txtè possibile passare il -aparametro a T.


2
La soluzione a T sembra molto meglio. L'altra cosa che menzioni non è simultanea.
barlop

1
@barlop - Sono d'accordo, la prima soluzione è un po 'una soluzione poiché non puoi farlo nativamente in Windows. tee fa bene il trucco qui :)
Gaff

Grazie per l'aiuto, votato, con la maglietta ma lesmana è arrivata un paio di minuti prima quando ha menzionato la
maglietta

Se si lascia fuori 'tipo', si aprirà il file nell'editor predefinito (blocco note per me) quando l'attività è completa.
Josh Stribling,


0

Avevo appena avuto un bisogno simile e ho usato Tail come l'OP ha suggerito che potrebbero:

>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!
)

"> C: \ Temp \ Commands_Log.txt" crea il file di registro e aggiunge l'output di tutti i comandi situati tra (parentesi).

Il primo comando tra parentesi dovrebbe essere quello di avviare la coda, che si aprirà in una nuova finestra di comando.

L'eco alla fine è per gli utenti non familiari per far loro sapere quando tutto è completo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.