Windows: redirection de ligne de commande vers un fichier texte tout en affichant la sortie


30

J'écris un programme C dans Windows, mes appels printf impriment sur la ligne de commande, et je sais que je peux rediriger toute cette sortie vers un fichier texte en utilisant:

myProgram.exe > mylog.txt

Cependant, je souhaite également voir la sortie qui aurait été imprimée sur la console ainsi que la consigner dans un fichier texte.

Y a-t-il un moyen de faire cela? Je pensais utiliser tail pour surveiller le fichier journal.


Ce que j'ai fait parfois, c'est ouvrir une autre fenêtre d'invite cmd et exécuter à plusieurs reprises le type mylog.txt (ou faire le bloc-notes mylog.txt) et voir comment il se développe. le tee-shirt ressemble à un grand cependant.
barlop


Réponses:


19

Les fenêtres PowerShell ont un outil qui peut le faire, nommé d' teeaprès l'outil Unix qui fait de même.

Alternativement, il existe des ports d'unix teepour Windows:


3
PowerShell est un excellent conseil, pourrait être cmd est juste pour les personnes qui n'ont pas encore évolué! Utiliser gnuwin32 est mieux que d'utiliser unxutils, unxutils est plutôt ancien. gnuwin32 est plus récent et a probablement tout aussi dans unxutils, et a beaucoup plus d'utilitaires. comme mentionné ailleurs, gnuwin32 coreutils a tee
barlop

La même chose fonctionne dans CMDer, un autre utilitaire de ligne de commande tiers.
Rauni

1
Dans cette réponse, superuser.com/a/273112/213743, BaconBits souligne que le tee PowerShell est orienté ligne: il ne sortira pas de ligne "jusqu'à ce qu'un caractère de fin de ligne soit atteint", un caractère de nouvelle ligne est rencontré. BaconBits suggère que le tee unix transmet toujours immédiatement le contenu.
buzz3791

8

Sous Windows, tout ce que je peux penser, c'est de faire ceci:

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

Ceci est basé sur l'exemple de commande dans votre question - si en fait vous vouliez ajouter la sortie à mylog.txtalors vous voudriez utiliser à la >>place de >, mais typeimprimeriez le fichier journal entier, pas seulement ce qui avait été ajouté.

Si vous téléchargez GnuWin32 CoreUtils , vous pouvez utiliser la méthode Unix ( teecommande) pour ce faire:

myProgram.exe | tee mylog.txt

Cela va écrire la sortie de myProgram.exe mylog.txtmais aussi l'afficher sur la console en même temps. Si vous souhaitez uniquement ajouter à, mylog.txtvous pouvez passer le -aparamètre à tee.


2
La solution de tee semble beaucoup mieux. L'autre chose que vous mentionnez n'est pas simultanée.
barlop

1
@barlop - Je suis d'accord, la première solution est un peu une solution de contournement puisque vous ne pouvez pas le faire en natif dans Windows. tee fait bien l'affaire ici :)
Gaff

Merci pour l'aide, a voté pour, mais avec les tee mais lesmana est entré quelques minutes plus tôt quand il a mentionné tee :)
user79397

Si vous omettez «type», le fichier s'ouvrira dans l'éditeur par défaut (le bloc-notes pour moi) lorsque la tâche sera terminée.
Josh Stribling le


0

J'ai juste eu un besoin similaire et j'ai utilisé Tail comme l'OP l'a suggéré:

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

Le "> C: \ Temp \ Commands_Log.txt" crée le fichier journal et ajoute la sortie de toutes les commandes situées à l'intérieur des (parenthèses).

La première commande à l'intérieur des parenthèses devrait être de démarrer Tail, qui s'ouvrira dans une nouvelle fenêtre de commande.

L'écho à la fin est destiné aux utilisateurs non familiers pour leur faire savoir quand tout est terminé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.