Windows CMD Batch, START und Ausgabeumleitung


34

Ich möchte zwei Programme gleichzeitig aus einer Batch-Datei ausführen und die Ausgabe des ersten Programms in eine Textdatei umleiten, z.

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

Während die Programme wie erwartet ausgeführt werden, werden alle Ausgaben auf stdout angezeigt.


Das sollte funktionieren. Ohne etwas zu wissen, frage ich mich, ob 1st.py etwas Lustiges mit der Ausgabe macht.
Zpletan

Nein, aber es schreibt an stderr.
keine

Das ist der Grund - >leitet nur stdout um (glaube ich). Auf jeden Fall scheint es so, als hätten Sie bereits das, was Sie brauchen.
Zpletan

Antworten:


35

Möglicherweise müssen Sie dies folgendermaßen tun:

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

Vielen Dank, aber es funktioniert nicht für mich (out.txt ist nicht einmal im lokalen Verzeichnis erstellt)
keine

Ich habe es mit CScript und einem VBscript getestet, die Idee ist also gut. Tun Sie etwas "Extra" in Ihrer Befehlszeile, das hier nicht aufgeführt ist, wie doppelte Anführungszeichen?
Patrick Seymour

Entschuldigung, etwas ist furchtbar schief gelaufen - es funktioniert!
Keine

@Patrick Seymour, danke für deine Antwort! Wie kann ich dasselbe ohne .bat-Datei tun? Dies funktioniert nicht mit cmd: python.exe ^> python_out.txt . Ich hatte einen Fehler: python.exe: Datei '>' kann nicht geöffnet werden: [Errno 22] Ungültiges Argument .
Neo

7

Die Umleitung wird auf den startBefehl angewendet , jedoch nicht auf die von ihm ausgeführte cmd.exeInstanz.

Wenn der >Bediener entkommen ist, sollte alles funktionieren:

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

(Wenn Sie auch stderr umleiten möchten, verwenden 2^>Sie dafür.)


4
Danke, aber es funktioniert bei mir nicht.
keine

5

Außerdem funktioniert dies für mich, wenn Sie sowohl stderr als auch stdout umleiten möchten

Rufen Sie delay.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1 auf

Es sieht so aus, als müsste jeder Charakter entkommen. Dieser Befehl sieht normalerweise so aus:

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


5

Der Trick bestand für mich darin, den Befehl in eine separate Batch-Datei zu verschieben:

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

the_second.bat sieht dann so aus:

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

Dies ist eine sehr unelegante Problemumgehung im Vergleich zur richtigen Antwort.
DavidPostill

2
Die "richtige Antwort" funktionierte bei mir nicht mit einem ähnlichen Problem und ich dachte, es könnte eine Lösung sein, über die die Leute zumindest Bescheid wissen wollen.
Florian Straub

Ich muss nicht zustimmen. Es ist eine viel bessere Idee, die richtige Art und Weise zu erlernen, um Zeichen im Kommando zu entkommen.
DavidPostill

Bitte bringen Sie mir bei, wie Sie das Anhängen von Ausgaben mit >> umgehen können.
Florian Straub

Ich habe es dir schon gesagt. Lesen Sie die akzeptierte Antwort.
DavidPostill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.