Windows: Pengalihan baris perintah ke file teks sambil juga melihat output

30

Saya sedang menulis program C di Windows, panggilan printf saya mencetak ke baris perintah, dan saya tahu bahwa saya dapat mengarahkan semua output ini ke file teks menggunakan:

myProgram.exe > mylog.txt

Namun, saya juga ingin melihat output yang akan dicetak ke konsol serta mencatat semuanya dalam file teks.

Apakah ada cara untuk melakukan ini? Saya sedang berpikir untuk menggunakan ekor untuk memonitor file log.

pengguna79397
sumber
Apa yang saya lakukan kadang-kadang adalah membuka jendela prompt cmd lain dan berulang kali mengeksekusi ketik mylog.txt (atau bisa melakukan notepad mylog.txt) dan lihat bagaimana ia berkembang. tee terlihat seperti yang hebat sekalipun.
barlop
Kemungkinan duplikat dari Cara mem-pipe output dan menduplikatnya ke STDOUT?
phuclv

Jawaban:

19

Windows PowerShell memiliki alat yang dapat melakukan itu, dinamai teealat unix yang melakukan hal yang sama.

Atau, ada port unix teeuntuk windows:

lesmana
sumber
3
Powershell adalah tip yang bagus, bisa cmd hanya untuk orang yang belum pindah! Menggunakan gnuwin32 lebih baik daripada menggunakan unxutils, unxutils agak lama. gnuwin32 lebih baru dan mungkin memiliki semua yang ada di unxutils juga, dan memiliki lebih banyak utilitas. seperti yang disebutkan di tempat lain, gnuwin32 coreutils memiliki tee
barlop
Sama berfungsi di CMDer, util baris perintah pihak ketiga lainnya.
Rauni
1
Dalam jawaban ini superuser.com/a/273112/213743 BaconBits menunjukkan bahwa tee PowerShell berorientasi pada garis: ia tidak akan menampilkan garis "sampai karakter akhir-line tercapai" karakter baris baru ditemukan. BaconBits menyarankan agar tee unix selalu segera meneruskan konten.
buzz3791
8

Di bawah Windows yang bisa saya pikirkan adalah melakukan ini:

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

Ini didasarkan pada contoh perintah dalam pertanyaan Anda - jika sebenarnya Anda ingin menambahkan output untuk mylog.txtkemudian Anda ingin menggunakan >>alih-alih >, tetapi typeakan mencetak seluruh file log, bukan hanya apa yang telah ditambahkan.

Jika Anda mengunduh GnuWin32 CoreUtils , Anda dapat menggunakan metode ( teeperintah) Unix untuk melakukan ini:

myProgram.exe | tee mylog.txt

Ini akan menulis output myProgram.exe mylog.txttetapi juga menampilkannya ke konsol secara bersamaan. Jika Anda hanya ingin menambahkan mylog.txtmaka Anda dapat meneruskan -aparameter ke tee.

Taji
sumber
2
Solusi tee terlihat jauh lebih baik. Hal lain yang Anda sebutkan tidak simultan.
barlop
1
@barlop - Saya setuju, solusi pertama adalah sedikit solusi karena Anda tidak dapat melakukannya secara native di Windows. tee melakukan trik dengan baik di sini :)
Gaff
Terima kasih atas bantuannya, ditingkatkan, menggunakan tee tetapi lesmana masuk beberapa menit sebelumnya ketika dia menyebutkan tee :)
user79397
Jika Anda meninggalkan 'ketik' itu akan membuka file di editor default (notepad untuk saya) ketika tugas selesai.
Josh Stribling
0

Saya menggunakan Visual Studio Code dan membuka file log dari sana, itu membuat tampilan up to date dalam waktu dekat saat perubahan file log

Jaime Botero
sumber
0

Saya hanya memiliki kebutuhan yang sama dan menggunakan Tail seperti yang disarankan 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" membuat file log dan menambahkan output dari semua perintah yang terletak di dalam (tanda kurung).

Perintah pertama di dalam tanda kurung harus memulai Tail, yang akan terbuka di jendela perintah baru.

Gema pada akhirnya adalah untuk pengguna yang tidak terbiasa untuk memberi tahu mereka ketika semuanya selesai.

DBADon
sumber