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.


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

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.)


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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.