Windows CMD Batch, START et redirection de sortie


34

Je voudrais exécuter deux programmes simultanément à partir d'un fichier de commandes et rediriger la sortie du premier programme dans un fichier texte comme:

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

Pendant que les programmes s'exécutent comme prévu, toutes les sorties sont affichées sur stdout.


Cela devrait fonctionner. Sans rien savoir, je me demande si 1st.py fait quelque chose de drôle avec la sortie.
zpletan

Non, mais il écrit à stderr.
aucun

C'est pourquoi - >redirige uniquement stdout (je pense). Dans tous les cas, il semble que vous ayez déjà ce dont vous avez besoin.
zpletan

Réponses:


35

Vous devrez peut-être procéder de cette façon:

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

Merci, mais cela ne fonctionne pas pour moi (out.txt n'est même pas créé dans le répertoire local)
aucun

Je l'ai testé avec CScript et un VBscript, donc l'idée est bonne. Faites-vous quelque chose "supplémentaire" dans votre ligne de commande qui n'est pas répertoriée ici, comme des guillemets doubles?
Patrick Seymour

Désolé, quelque chose s'est terriblement mal passé - ça marche!
aucun

@Patrick Seymour, merci pour votre réponse! Comment puis-je faire la même chose sans le fichier .bat? Cela ne fonctionne pas à partir de cmd: python.exe ^> python_out.txt . J'ai eu une erreur: python.exe: impossible d'ouvrir le fichier '>': [Errno 22] Argument invalide .
neo

7

La redirection est appliquée à la startcommande, mais pas à l' cmd.exeinstance qu'elle exécute.

Si l' >opérateur est échappé, tout devrait fonctionner:

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

(Si vous souhaitez également rediriger stderr, utilisez 2^>-le.)


4
Merci, mais ça ne marche pas pour moi.
aucun

5

De plus, si vous souhaitez rediriger à la fois stderr et stdout, cela fonctionne pour moi

démarrer l'appel delay.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Il semble que chaque personnage doive être échappé. Cette commande ressemble normalement à ceci:

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


5

Pour moi, l'astuce a été de déplacer la commande dans un fichier de commandes distinct:

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

the_second.bat ressemble alors à ceci:

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

Il s'agit d'une solution de contournement très inélégante par rapport à la bonne réponse.
DavidPostill

2
La «bonne réponse» n'a pas fonctionné pour moi avec un problème similaire et j'ai pensé que ce pourrait être une solution que les gens voudraient au moins connaître.
Florian Straub

Je dois être en désaccord. Apprendre la bonne façon d'échapper aux personnages aux commandes est une bien meilleure idée.
DavidPostill

S'il vous plaît, apprenez-moi comment échapper à la sortie attachée en utilisant >>.
Florian Straub

Je te l'ai déjà dit. Lisez la réponse acceptée.
DavidPostill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.