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.