Batch CMD di Windows, START e reindirizzamento dell'output


34

Vorrei eseguire due programmi contemporaneamente da un file batch e reindirizzare l'output del primo programma in un file di testo come:

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

Mentre i programmi funzionano come previsto, tutto l'output viene mostrato su stdout.


Questo dovrebbe funzionare. Senza sapere nulla, mi chiedo se 1st.py stia facendo qualcosa di divertente con l'output.
zpletan,

No, ma scrive a stderr.
nessuno

Ecco perché— >reindirizza solo stdout (credo). In ogni caso, sembra che tu abbia già ciò di cui hai bisogno.
zpletan,

Risposte:


35

Potrebbe essere necessario farlo in questo modo:

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

Grazie, ma non funziona per me (out.txt non viene nemmeno creato nella directory locale)
nessuno

L'ho provato con CScript e un VBscript, quindi l'idea è valida. Stai facendo qualcosa di "extra" nella tua riga di comando che non è elencato qui, come le doppie virgolette?
Patrick Seymour,

Spiacente, qualcosa è andato storto - funziona!
nessuno

@Patrick Seymour, grazie per la tua risposta! Come posso fare la stessa cosa senza il file .bat? Questo non funziona da cmd: python.exe ^> python_out.txt . Ho avuto un errore: python.exe: impossibile aprire il file '>': [Errno 22] Argomento non valido .
neo

7

Il reindirizzamento viene applicato al startcomando, ma in qualche modo non cmd.exeall'istanza che esegue.

Se l' >operatore è fuggito, tutto dovrebbe funzionare:

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

(Se si desidera reindirizzare anche stderr, utilizzare 2^>per esso.)


4
Grazie, ma non funziona per me.
nessuno

5

Inoltre, se vuoi reindirizzare sia stderr che stdout, questo funziona per me

avvia il ritardo di chiamata.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Sembra che ogni personaggio debba fondamentalmente essere evaso. Questo comando normalmente si presenta così:

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


5

Qual è stato il trucco per me è stato spostare il comando in un file batch separato:

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

the_second.bat si presenta così:

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

Questa è una soluzione molto inelegante rispetto alla risposta corretta.
David Post

2
La "risposta corretta" non ha funzionato per me con un problema simile e ho pensato che potesse essere una soluzione che le persone almeno vorrebbero conoscere.
Florian Straub,

Non sono d'accordo. Imparare il modo corretto di sfuggire ai personaggi al comando è un'idea molto migliore.
DavidPostill

Per favore, insegnami come evitare di collegare l'output usando >>.
Florian Straub,

Te l'ho già detto. Leggi la risposta accettata.
David Post
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.