Windows: Redirecionamento de linha de comando para arquivo de texto enquanto também vê saída

30

Estou escrevendo um programa C no Windows, minhas chamadas printf são impressas na linha de comando e sei que posso redirecionar toda essa saída para um arquivo de texto usando:

myProgram.exe > mylog.txt

No entanto, desejo também ver a saída que seria impressa no console e registrar tudo isso em um arquivo de texto.

Existe uma maneira de fazer isso? Eu estava pensando em usar cauda para monitorar o arquivo de log.

user79397
fonte
O que eu fiz às vezes é abrir outra janela de prompt do cmd e executar repetidamente o tipo mylog.txt (ou poderia fazer o bloco de notas mylog.txt) e ver como ele se desenvolve. tee parece um grande embora.
barlop

Respostas:

19

O Windows PowerShell tem uma ferramenta que pode fazer isso, nomeada teeapós a ferramenta unix que faz o mesmo.

Como alternativa, existem portas do unix teepara windows:

lesmana
fonte
3
powershell é uma ótima dica, poderia ser cmd é apenas para pessoas que ainda não seguiram em frente! Usar o gnuwin32 é melhor do que usar o unxutils, o unxutils é bastante antigo. O gnuwin32 é mais recente e provavelmente possui tudo em unxutils também, e possui muito mais utilitários. Como mencionado anteriormente, GnuWin32 coreutils tem T
barlop
O mesmo funciona no CMDer, outro utilitário de linha de comando de terceiros.
Rauni
1
Nesta resposta, superuser.com/a/273112/213743 BaconBits ressalta que o tee do PowerShell é orientado a linhas: ele não produzirá uma linha "até que um caractere de fim de linha seja alcançado" é encontrado um caractere de nova linha. O BaconBits sugere que o tee unix sempre encaminhe imediatamente o conteúdo.
buzz3791
8

No Windows, tudo o que posso pensar é fazer isso:

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

Isso se baseia no exemplo de comando da sua pergunta - se, de fato, você deseja anexar a saída, mylog.txtentão você deseja usar em >>vez de >, mas typeimprimiria o arquivo de log inteiro, não apenas o que foi anexado.

Se você baixar o GnuWin32 CoreUtils , poderá usar o método Unix ( teecomando) para fazer isso:

myProgram.exe | tee mylog.txt

Isso gravará a saída do myProgram.exe para, mylog.txtmas também a exibirá no console ao mesmo tempo. Se você deseja apenas anexar mylog.txt, pode passar o -aparâmetro para tee.

Gaff
fonte
2
A solução tee parece muito melhor. A outra coisa que você menciona não é simultânea.
barlop
1
@ Barlop - Concordo, a primeira solução é uma solução alternativa, pois você não pode fazê-lo nativamente no Windows. tee faz o truque muito bem aqui :)
Gaff
Obrigado pela ajuda, upvoted, indo com tee mas Lesmana entrou em um par de minutos antes, quando ele / ela mencionou tee :)
user79397
Se você omitir 'type', ele abrirá o arquivo no editor padrão (bloco de notas para mim) quando a tarefa estiver concluída.
Josh Stribling
0

Eu uso o Visual Studio Code e abro o arquivo de log a partir daí, ele mantém a visualização atualizada quase em tempo real à medida que o arquivo de log é alterado

Jaime Botero
fonte
0

Eu só tinha uma necessidade semelhante e usei o Tail, pois o OP sugeria que eles:

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

O "> C: \ Temp \ Commands_Log.txt" cria o arquivo de log e adiciona a saída de todos os comandos localizados dentro dos (parênteses).

O primeiro comando dentro dos parênteses deve ser o de iniciar o Tail, que será aberto em uma nova janela de comando.

Os ecos no final destinam-se a usuários desconhecidos, informando-os quando tudo estiver completo.

DBADon
fonte