Windows: перенаправление командной строки в текстовый файл, а также вывод результатов

30

Я пишу программу на C в Windows, мой printf вызывает print в командную строку, и я знаю, что могу перенаправить весь этот вывод в текстовый файл, используя:

myProgram.exe > mylog.txt

Тем не менее, я хотел бы также увидеть вывод, который был бы напечатан на консоли, а также записать все это в текстовом файле.

Есть ли способ сделать это? Я думал об использовании tail для мониторинга файла журнала.

user79397
источник
Иногда я открывал другое окно командной строки cmd и многократно выполнял тип mylog.txt (или мог сделать блокнот mylog.txt) и смотрел, как он развивается. тройник выглядит как отличный, хотя.
Барлоп

Ответы:

19

Windows PowerShell имеет инструмент, который может сделать это, названный в teeчесть инструмента Unix, который делает то же самое.

В качестве альтернативы, есть порты Unix teeдля Windows:

lesmana
источник
3
PowerShell - отличный совет, может быть, CMD только для людей, которые еще не ушли! Использование gnuwin32 лучше, чем использование unxutils, unxutils довольно старый. gnuwin32 новее и, вероятно, содержит все в unxutils и имеет гораздо больше утилит. как уже упоминалось в другом месте, gnuwin32 Coreutils имеет тройник
barlop
То же самое работает в CMDer, другом стороннем утилите командной строки.
Рауни
1
В этом ответе superuser.com/a/273112/213743 BaconBits указывает на то, что тройник PowerShell ориентирован на строки: он не будет выводить строку «до достижения символа конца строки», встречается символ перевода строки. BaconBits предполагает, что юникс- тройник всегда сразу пересылает контент.
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. Ти делает хороший трюк здесь :)
Gaff
Спасибо за помощь, проголосовали, пошли с тройником, но лесмена попала на пару минут раньше, когда он упомянул
тройку
Если вы укажете «type», он откроет файл в редакторе по умолчанию (блокнот для меня), когда задача будет выполнена.
Джош Стриблинг
0

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

Хайме Ботеро
источник
0

У меня просто была похожая потребность, и я использовал Tail, поскольку OP предположил, что они могут:

>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» создает файл журнала и добавляет выходные данные всех команд, расположенных внутри (круглые скобки).

Первая команда в скобках должна состоять в том, чтобы запустить хвост, который откроется в новом командном окне.

В конце эхо для незнакомых пользователей, чтобы они знали, когда все будет завершено.

DBADon
источник