Windows CMD Batch, START i przekierowanie danych wyjściowych

34

Chciałbym uruchomić dwa programy jednocześnie z pliku wsadowego i przekierować wyjście pierwszego programu do pliku tekstowego takiego jak:

start python 1st.py arg1 arg2 > out.txt
start 2nd.exe %1 arg2 arg3

Podczas gdy programy działają zgodnie z oczekiwaniami, wszystkie dane wyjściowe są wyświetlane na standardowym wyjściu.

Żaden
źródło
To powinno zadziałać. Nie wiedząc nic, zastanawiam się, czy 1st.py robi coś śmiesznego z wyjściem.
zpletan
Nie, ale pisze do stderr.
brak
Dlatego - >tylko przekierowuje stdout (myślę). W każdym razie wygląda na to, że masz już to, czego potrzebujesz.
zpletan

Odpowiedzi:

35

Być może trzeba to zrobić w ten sposób:

start cmd /c python 1st.py arg1 arg2 ^> out.txt
Patrick Seymour
źródło
Dziękuję, ale to nie działa dla mnie (out.txt nie jest nawet tworzony w katalogu lokalnym)
brak
Przetestowałem go z CScript i VBscript, więc pomysł jest zdrowy. Czy robisz coś „dodatkowego” w wierszu polecenia, którego nie ma tutaj, na przykład podwójne cudzysłowy?
Patrick Seymour,
Niestety, coś poszło nie tak - działa!
brak
@Patrick Seymour, dziękuję za odpowiedź! Jak mogę zrobić to samo bez pliku .bat? To nie działa z cmd: python.exe ^> python_out.txt . Miałem błąd: python.exe: nie można otworzyć pliku „>”: [Errno 22] Niepoprawny argument .
neo
7

Przekierowanie jest stosowane do startpolecenia, ale jakoś nie do uruchomionej cmd.exeinstancji.

Jeśli >operator ucieknie, wszystko powinno działać:

start 1st.py arg1 arg2 ^> out.txt

(Jeśli chcesz również przekierować stderr, użyj 2^>go.)

grawitacja
źródło
4
Dziękuję, ale to nie działa dla mnie.
brak
5

Dodatkowo, jeśli chcesz przekierować zarówno stderr, jak i stdout, to działa dla mnie

uruchom opóźnienie połączenia. bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Wygląda na to, że każda postać musi w zasadzie uciec. To polecenie zwykle wygląda następująco:

delay.bat 1> log.txt 2> i 1

sandały
źródło
5

Jaką sztuczką było dla mnie przeniesienie polecenia do osobnego pliku wsadowego:

rem this first batch file triggers the second one:
start the_second.bat arg1 arg2 out.txt

the_second.bat wygląda następująco:

python 1st.py %1 %2 > %3
Florian Straub
źródło
Jest to bardzo nieeleganckie obejście w porównaniu z poprawną odpowiedzią.
DavidPostill
2
„Prawidłowa odpowiedź” nie działała dla mnie z podobnym problemem i pomyślałem, że może to być rozwiązanie, o którym przynajmniej ludzie chcieliby wiedzieć.
Florian Straub
Muszę się nie zgodzić. Nauka poprawnego sposobu ucieczki postaci w dowodzeniu jest znacznie lepszym pomysłem.
DavidPostill
Naucz mnie, jak uniknąć dołączania danych wyjściowych za pomocą >>.
Florian Straub
Już ci mówiłam. Przeczytaj zaakceptowaną odpowiedź.
DavidPostill