2008-11-10 8 views
1

J'ai un script PHP que j'exécute à partir d'une ligne de commande (windows) qui effectue une variété de tâches, et la seule sortie qu'il donne est via ' print 'déclarations qui produisent directement à l'écran.Comment capturer et afficher la sortie d'une tâche via Windows CMD

Ce que je veux faire est également de capturer ceci dans un fichier journal.

Je sais que je peux faire:

php-cli script.php > log.txt 

Mais le problème avec cette approche est que toute la production est écrit dans le fichier journal, mais je ne peux pas voir comment les choses sont en cours d'exécution dans le même temps (donc je peux arrêter le processus si quelque chose douteux se passe). Juste pour devancer d'autres questions possibles, je ne peux pas changer toutes les impressions à une déclaration de journal car il y en a beaucoup trop et je préfère ne rien changer dans le code de peur d'être blâmé pour quelque chose aller fubar. De plus, il y a aussi le manque de temps. Je dois également exécuter ceci sur une machine de Windows.

Merci à l'avance :)

Edit: Merci pour les réponses les gars, à la fin je suis allé avec la méthode du navigateur parce que c'était le plus facile et plus rapide à mettre en place, même si je suis convaincu qu'il ya une réponse réelle à ce problème quelque part.

Répondre

1

J'ai toujours ouvert le fichier journal dans mon navigateur web. Cela me permet de l'actualiser facilement et n'interrompt aucune écriture dans le fichier que Windows fait. Ce n'est pas particulièrement élégant mais ça marche!

+1

Vous pouvez aussi utiliser la commande "tail" (il existe plusieurs versions de Windows, comme mtail), qui serait en temps réel et éviterait besoin de rafraîchissement manuel. – Jay

3

Vous pouvez créer un script PowerShell qui exécute la commande, lit les données à partir de STDOUT de la commande, puis affiche la sortie dans le fichier journal et le terminal que vous souhaitez regarder. Vous pouvez utiliser les commandes Write-Output et Write-Host.

site de Microsoft: http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/tee-object.mspx

Une autre option serait l'utilisation trouver un programme de départ qui va lire l'entrée et le détourner vers deux sorties différentes. Je crois que j'ai vu ceux-ci pour les fenêtres mais je ne pense pas qu'ils sont standard.

Wikipedia: http://en.wikipedia.org/wiki/Tee_(command)

+1

en fait, powershell inclut déjà "tee" donc pas besoin d'écrire un script powershell :-) – Jay

0

lent:

for /f "delims=" %a in ('php-cli script.php') do @echo %a&echo %a>>log.txt 

ou dans un fichier batch:

for /f "delims=" %%a in ('php-cli script.php') do @echo %%a&echo %%a>>log.txt 
1

Vous voulez la commande "T" pour Windows. Voir http://en.wikipedia.org/wiki/Tee_(command)

Powershell comprend une commande de départ, et il y a aussi de nombreuses versions de tee pour Windows disponibles, par exemple:

peut également être implemented in VBScript si vous préférer.

EDIT: Il me vient à l'esprit Je devrais également mentionner la commande de queue: http://en.wikipedia.org/wiki/Tail_(Unix).Tail vous permet de lire les dernières lignes N d'un fichier, et inclut également un mode «moniteur de fichiers» qui affiche en permanence la fin du fichier en temps réel. C'est parfait pour la surveillance des fichiers journaux car il vous permet de regarder le journal en temps réel sans interférer avec le processus qui écrit dans le journal. Il existe plusieurs implémentations de tail pour Windows, à la fois en ligne de commande et sous GUI. Les services de Microsoft pour les packages UNIX (ou tout ce qu'ils appellent maintenant) incluent également une version de tail. Quelques exemples:

Certains d'entre eux vont bien au-delà l'affichage du fichier en temps réel car il met à jour et peut envoyer des alertes par e-mail et coloriser les correspondances de chaînes, surveiller plusieurs fichiers à la fois, etc.

Questions connexes