Como captura e exibição de saída de uma tarefa via Windows CMD
-
07-07-2019 - |
Pergunta
Eu tenho um script PHP que eu estou fugindo de uma linha de comando (Windows) que executa uma variedade de tarefas, ea única saída que dá é através de declarações 'print' que saída direta para a tela.
O que eu quero fazer é a captura a um arquivo de log também.
Eu sei que posso fazer:
php-cli script.php > log.txt
Mas o problema com esta abordagem é que toda a saída é gravada no arquivo de log, mas eu não posso ver como as coisas estão funcionando no tempo médio (para que eu possa parar o processo se algo desonesto está acontecendo).
Apenas para antecipar-se outras questões possíveis, eu não posso mudar toda a cópia de uma declaração de registro, pois há demasiados deles e eu prefiro não mudar nada no código para que eu não ser culpado por algo acontecendo danoso. Além disso, há a falta de aspecto tempo também. Eu também tenho que executar isso em uma máquina Windows.
Agradecemos antecipadamente:)
Edit:. Obrigado pelas caras respostas, no final eu fui com o método navegador porque essa era a mais rápida e fácil de configurar, embora eu estou convencido de que há uma resposta real para isso em algum lugar problema
Solução
Eu sempre aberto o arquivo de log em meu navegador web. Isso me permite atualizar-lo facilmente e não interrompe qualquer escrito para o arquivo que o Windows faz. Não é particularmente elegante, mas ela não funciona!
Outras dicas
Você pode criar um script powershell que executa o comando, lê os dados a partir de STDOUT do comando, em seguida, envia a saída para o arquivo de log e do terminal para você assistir. Você pode usar os comandos Write-Output e Write-Host.
site da Microsoft: http: // www. microsoft.com/technet/scriptcenter/topics/msh/cmdlets/tee-object.mspx
Outra opção seria o uso encontrar um tee programa que irá ler a entrada e desviá-la para duas saídas diferentes. Creio ter visto estes para janelas, mas eu não acho que eles são padrão.
Wikipedia: http://en.wikipedia.org/wiki/Tee_(command)
Você deseja que o comando "tee" para Windows. Consulte http://en.wikipedia.org/wiki/Tee_(command)
PowerShell inclui um comando T, e também há inúmeras versões do tee para Windows disponíveis, por exemplo:
Também pode ser implementada no VBScript se você preferir.
Editar : Apenas me ocorreu que eu também mencionar o comando tail: http://en.wikipedia.org/wiki/Tail_ (Unix) . Cauda permite que você leia a última N linhas de um arquivo, e também inclui um modo "monitor de arquivo" que apenas continuamente exibe o final do arquivo em tempo real. Isto é perfeito para o arquivo de log de monitoramento, uma vez que permite que você assista o log em tempo real sem interferir com o processo que está escrito para o log. Existem várias implementações de cauda para o Windows, tanto de linha de comando e interface gráfica baseada. Serviços da Microsoft para pacotes UNIX (ou o que eles estão chamando agora) também incluem uma versão de cauda. Alguns exemplos:
Alguns deles vão muito além de apenas exibir o arquivo em tempo real, uma vez que atualiza e pode enviar e-mail alertas e jogos de cordas colorize, monitorar vários arquivos de uma vez, etc.
lenta:
for /f "delims=" %a in ('php-cli script.php') do @echo %a&echo %a>>log.txt
ou em um arquivo de lote:
for /f "delims=" %%a in ('php-cli script.php') do @echo %%a&echo %%a>>log.txt