Windows: Перенаправлення командного рядка до текстового файлу, а також бачити вихід


30

Я пишу програму C у Windows, мій printf викликає друк у командному рядку, і я знаю, що я можу перенаправити весь цей вихід у текстовий файл, використовуючи:

myProgram.exe > mylog.txt

Однак я хочу також побачити вихід, який був би надрукований на консолі, а також записати все це у текстовий файл.

Чи є спосіб це зробити? Я думав використовувати хвіст для моніторингу файлу журналу.


Що я робив іноді, це відкрити ще одне вікно підказок cmd і кілька разів виконувати тип mylog.txt (або міг би зробити блокнот mylog.txt) і подивитися, як воно розвивається. Тий, здається, чудовий.
барлоп


Відповіді:


19

У Windows PowerShell є інструмент, який може це зробити, іменований teeза інструментом unix, який робить те саме.

Крім того, є порти unix teeдля Windows:


3
powershell - це чудова порада, cmd - це лише для людей, які ще не рухалися! Використовувати gnuwin32 краще, ніж використовувати unxutils, unxutils є досить старим. gnuwin32 новіший і, ймовірно, має все, що стосується і непредметних програм, і має набагато більше утиліт. як уже згадувалося в іншому місці, gnuwin32 coreutils має трійку
барлоп

Те саме працює в CMDer, ще одному сторонньому утиліті командного рядка сторонньої програми.
Рауні

1
У цій відповіді superuser.com/a/273112/213743 BaconBits вказує, що трійник PowerShell орієнтований на лінійку: він не буде виводити лінію ", поки не буде досягнуто символу кінця рядка". BaconBits припускає, що Unix tee завжди негайно пересилає вміст.
buzz3791

8

У Windows все, що я можу подумати, - це зробити:

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

Це ґрунтується на прикладі команди у вашому запитанні - якщо б ви насправді хотіли додати висновок до mylog.txtцього, ви б хотіли використовувати >>замість цього >, але typeроздрукували б весь файл журналу, а не лише те, що було додано.

Якщо ви завантажуєте GnuWin32 CoreUtils , ви можете використовувати метод ( teeкоманду) Unix для цього:

myProgram.exe | tee mylog.txt

Це дозволить записати вихід myProgram.exe, mylog.txtале також одночасно відобразити його на консолі. Якщо ви хочете лише додати, mylog.txtви можете передати -aпараметр tee.


2
Рішення трійника виглядає набагато краще. Інше, що ви згадуєте, не є одночасним.
барлоп

1
@barlop - Я погоджуюсь, що перше рішення - це трохи вирішення, оскільки ви не можете це зробити в Windows. Тейк чудово трюкує тут :)
Гафф

Дякуємо за допомогу, прихильне, збираюся з трійкою, але лесман потрапив на пару хвилин раніше, коли він / вона згадав про трійку :)
користувач79397

Якщо ви не впустите 'type', він відкриє файл у редакторі за замовчуванням (для мене блокнот), коли завдання буде виконано.
Джош Стриблінг

0

Я використовую Visual Studio Code і відкриваю файл журналу звідти, він підтримує подання даних майже в режимі реального часу, коли змінюється файл журналу


0

Я просто мав подібну потребу і використовував Хвіст, оскільки ОП запропонував:

>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" створює файл журналу і додає висновок з усіх команд, розташованих всередині (в дужках).

Першою командою всередині дужок повинно бути запуск хвоста, який відкриється у новому вікні команд.

Ехо в кінці призначені для незнайомих користувачів, щоб повідомити їх, коли все буде завершено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.