Windows: Przekierowanie wiersza poleceń do pliku tekstowego, a także wyjście

24

Piszę program C w systemie Windows, moje wywołania printf są drukowane w wierszu poleceń i wiem, że mogę przekierować całe to wyjście do pliku tekstowego, używając:

myProgram.exe > mylog.txt

Chciałbym jednak również zobaczyć dane wyjściowe, które zostałyby wydrukowane na konsoli, a także zalogować je wszystkie w pliku tekstowym.

Czy istnieje sposób, aby to zrobić? Myślałem o użyciu ogona do monitorowania pliku dziennika.

user79397
źródło
Czasem zrobiłem to, otwierając kolejne okno polecenia cmd i wielokrotnie wykonując polecenie mylog.txt (lub mogłem zrobić notatnik mylog.txt) i zobaczyć, jak się rozwija. tee wygląda jednak świetnie.
barlop

Odpowiedzi:

16

Okna PowerShell ma narzędzie, które może to zrobić, nazwane tee po narzędziu unixowym, które robi to samo.

Alternatywnie istnieją porty unixa tee dla Windowsa:

lesmana
źródło
3
PowerShell to świetna wskazówka, może być cmd tylko dla osób, które jeszcze się nie przeprowadziły! Używanie gnuwin32 jest lepsze niż używanie unxutils, unxutils jest raczej stary. gnuwin32 jest nowszy i prawdopodobnie ma wszystko w unxutils i ma o wiele więcej narzędzi. jak wspomniano w innym miejscu, gnuwin32 coreutils ma tee
barlop
To samo działa w CMDer, innym programie narzędziowym wiersza poleceń innej firmy.
Rauni
1
W tej odpowiedzi superuser.com/a/273112/213743 BaconBits wskazuje, że PowerShell trójnik jest zorientowany liniowo: nie wyświetli linii „dopóki nie zostanie osiągnięty znak końca linii”. BaconBits sugeruje, że unix trójnik zawsze natychmiast przekazuje treść.
buzz3791
7

W systemie Windows wszystko, co mogę myśleć, to zrobić:

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

Jest to oparte na przykładzie polecenia w twoim pytaniu - jeśli w rzeczywistości chcesz dołączyć wyjście do mylog.txt wtedy chciałbyś użyć >> zamiast >, ale type wydrukuje cały plik dziennika, a nie tylko to, co zostało dołączone.

Jeśli pobierzesz GnuWin32 CoreUtils , możesz użyć metody Unix ( tee polecenie), aby to zrobić:

myProgram.exe | tee mylog.txt

Spowoduje to zapisanie wyniku myProgram.exe na mylog.txt ale jednocześnie wyświetlaj go na konsoli. Jeśli chcesz tylko dołączyć do mylog.txt wtedy możesz przekazać -a parametr do tee.

3498DB
źródło
2
Rozwiązanie tee wygląda znacznie lepiej. Inna rzecz, o której wspominasz, nie jest jednoczesna.
barlop
1
@barlop - Zgadzam się, pierwsze rozwiązanie to trochę obejścia, ponieważ nie można tego zrobić natywnie w systemie Windows. tee ładnie tu robi sztuczkę :)
3498DB
Dziękuję za pomoc, awansowany, chodzenie z tee, ale lesmana dostała się kilka minut wcześniej, kiedy wspomniał o tee :)
user79397
Jeśli opuścisz 'type', otworzy się plik w domyślnym edytorze (notatnik dla mnie), gdy zadanie zostanie zakończone.
Josh Stribling
0

używam Kod Visual Studio i otwórz plik dziennika stamtąd, aktualizuje widok w czasie zbliżonym do rzeczywistego, gdy zmienia się plik dziennika

Jaime Botero
źródło