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


30

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

myProgram.exe > mylog.txt

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

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


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


Ответы:


19

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

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


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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.