Lote do Windows CMD, INÍCIO e redirecionamento de saída


34

Gostaria de executar dois programas simultaneamente a partir de um arquivo em lotes e redirecionar a saída do primeiro programa para um arquivo de texto como:

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

Enquanto os programas são executados conforme o esperado, toda a saída é mostrada no stdout.


Isso deve funcionar. Sem saber nada, eu me pergunto se o 1st.py está fazendo algo engraçado com a saída.
zpletan

Não, mas escreve para stderr.
nenhum

É por isso - >apenas redireciona o stdout (eu acho). De qualquer forma, parece que você já tem o que precisa.
zpletan

Respostas:


35

Pode ser necessário fazer o seguinte:

start cmd /c python 1st.py arg1 arg2 ^> out.txt

Obrigado, mas não funciona para mim (o out.txt nem sequer é criado no diretório local)
nenhum

Eu testei com CScript e um VBscript, então a ideia é sólida. Você está fazendo algo "extra" em sua linha de comando que não está listado aqui, como aspas duplas?
Patrick Seymour

Desculpe, algo deu muito errado - funciona!
nenhum

@ Patrick Seymour, obrigado por sua resposta! Como posso fazer a mesma coisa sem o arquivo .bat? Isso não funciona no cmd: python.exe ^> python_out.txt . Ocorreu um erro: python.exe: não é possível abrir o arquivo '>': [Erro 22] Argumento inválido .
neo

7

O redirecionamento é aplicado ao startcomando, mas de alguma forma não à cmd.exeinstância em que é executado.

Se o >operador escapar, tudo deve funcionar:

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

(Se você também deseja redirecionar o stderr, use 2^>-o.)


4
Obrigado, mas não funciona para mim.
nenhum

5

Além disso, se você deseja redirecionar stderr e stdout, isso funciona para mim

iniciar atraso da chamada.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Parece que todo personagem basicamente precisa ser escapado. Este comando normalmente se parece com isso:

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


5

O que fez o truque para mim foi mover o comando para um arquivo em lotes separado:

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

the_second.bat fica assim:

python 1st.py %1 %2 > %3

Esta é uma solução muito deselegante em comparação com a resposta correta.
DavidPostill

2
A "resposta correta" não funcionou para mim com um problema semelhante e achei que poderia ser uma solução que as pessoas pelo menos gostariam de saber.
Florian Straub 27/07

Eu tenho que discordar. Aprender a maneira correta de escapar dos personagens no comando é uma idéia muito melhor.
DavidPostill

Por favor, ensine-me como escapar de anexar saída usando >>.
Florian Straub 28/07

Eu já te disse. Leia a resposta aceita.
DavidPostill
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.