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.


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

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


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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.