Windows CMD Batch, START y redirección de salida

34

Me gustaría ejecutar dos programas simultáneamente desde un archivo por lotes y redirigir la salida del primer programa a un archivo de texto como:

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

Mientras los programas se ejecutan como se esperaba, todos los resultados se muestran en stdout.

ninguna
fuente
Esto debería funcionar. Sin saber nada, me pregunto si 1st.py está haciendo algo divertido con la salida.
zpletan
No, pero escribe a stderr.
ninguno
Es por eso que >solo redirige stdout (creo). En cualquier caso, parece que ya tienes lo que necesitas.
zpletan

Respuestas:

35

Es posible que deba hacerlo de esta manera:

start cmd /c python 1st.py arg1 arg2 ^> out.txt
Patrick Seymour
fuente
Gracias, pero no funciona para mí (out.txt ni siquiera se crea en el directorio local)
ninguno
Lo probé con CScript y un VBscript, por lo que la idea es sólida. ¿Estás haciendo algo "extra" en tu línea de comando que no se enumera aquí, como comillas dobles?
Patrick Seymour
Lo sentimos, algo salió muy mal, ¡funciona!
ninguno
@Patrick Seymour, ¡gracias por tu respuesta! ¿Cómo puedo hacer lo mismo sin el archivo .bat? Esto no funciona desde cmd: python.exe ^> python_out.txt . Tuve un error: python.exe: no se puede abrir el archivo '>': [Errno 22] Argumento no válido .
neo
7

La redirección se aplica al startcomando, pero de alguna manera no a la cmd.exeinstancia que ejecuta.

Si el >operador se escapa, todo debería funcionar:

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

(Si desea redirigir stderr también, úselo 2^>).

Gravedad
fuente
44
Gracias, pero no me funciona.
ninguno
5

Además, si desea redirigir tanto stderr como stdout, esto funciona para mí

iniciar llamada delay.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Parece que cada personaje básicamente necesita escapar. Este comando normalmente se ve así:

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

sandos
fuente
5

Lo que me sirvió fue mover el comando a un archivo por lotes separado:

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

the_second.bat entonces se ve así:

python 1st.py %1 %2 > %3
Florian Straub
fuente
Esta es una solución muy poco elegante en comparación con la respuesta correcta.
DavidPostill
2
La "respuesta correcta" no funcionó para mí con un problema similar y pensé que podría ser una solución que la gente al menos querría saber.
Florian Straub
Tengo que estar en desacuerdo. Aprender la forma correcta de escapar de los personajes al mando es una idea mucho mejor.
DavidPostill
Por favor, enséñeme cómo escapar de la salida adjunta usando >>.
Florian Straub
Ya te dije. Lee la respuesta aceptada.
DavidPostill