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.

keiner
quelle
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
Patrick Seymour
quelle
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.)

Grawity
quelle
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

Sandos
quelle
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
Florian Straub
quelle
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