33

I would like to run two programs simultaneously from a batch file, and redirect the first program's output into a text file like:

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

While the programs run as expected, all output is shown on stdout.

  • This ought to work. Without knowing anything, I wonder if 1st.py is doing something funny with output. – zpletan Sep 21 '11 at 17:17
  • No, but it writes to stderr. – none Sep 21 '11 at 17:25
  • That's why—> only redirects stdout (I think). In any case, it looks like you already have what you need. – zpletan Sep 21 '11 at 20:51
34

You might need to do it this way:

start cmd /c python 1st.py arg1 arg2 ^> out.txt
  • Thank you, but it does not work for me (out.txt is not even created in the local directory) – none Sep 21 '11 at 17:52
  • I tested it with CScript and a VBscript, so the idea is sound. Are you doing something "extra" in your command line that's not listed here, like double quotes? – Patrick Seymour Sep 21 '11 at 18:19
  • Sorry, something went awfully wrong - it works! – none Sep 21 '11 at 18:27
  • @Patrick Seymour, thank you for your answer! How can I do same thing without .bat file? This doesn't work from cmd: python.exe ^> python_out.txt. I had an error: python.exe: can't open file '>': [Errno 22] Invalid argument. – neo Dec 8 '16 at 18:30
7

Redirection is applied to the start command, but somehow not to the cmd.exe instance it runs.

If the > operator is escaped, everything should work:

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

(If you want to redirect stderr as well, use 2^> for it.)

  • 2
    Thank you, but it does not work for me. – none Sep 21 '11 at 17:52
5

Additionally, if you want to redirect both stderr and stdout this works for me

start call delay.bat ^1^> log.txt ^2^>^&^1

It seems every character basically needs to be escaped. This command normally looks like this:

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

4

What did the trick for me was moving the command into a separate batch file:

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

the_second.bat then looks like this:

python 1st.py %1 %2 > %3
  • This is a very inelegant workaround compared to the correct answer. – DavidPostill Jul 27 '16 at 6:58
  • 1
    The "correct answer" didn't work for me with a similiar problem and I thought it might be a solution people at least might want to know about. – Florian Straub Jul 27 '16 at 12:44
  • I have to disagree. Learning the correct way to escape characters in command is a much better idea. – DavidPostill Jul 27 '16 at 12:46
  • Please teach me how to escape attaching output using >>. – Florian Straub Jul 28 '16 at 7:53
  • I already told you. Read the accepted answer. – DavidPostill Jul 28 '16 at 8:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.