Windows CMD Batch, MULAI dan pengalihan output

34

Saya ingin menjalankan dua program secara bersamaan dari file batch, dan mengarahkan output program pertama ke file teks seperti:

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

Sementara program berjalan seperti yang diharapkan, semua output ditampilkan di stdout.

tidak ada
sumber
Ini seharusnya berhasil. Tanpa tahu apa-apa, saya ingin tahu apakah 1st.py melakukan sesuatu yang lucu dengan output.
zpletan
Tidak, tetapi ini menulis ke stderr.
tidak ada
Itu sebabnya— >hanya pengalihan stdout (saya pikir). Bagaimanapun, sepertinya Anda sudah memiliki apa yang Anda butuhkan.
zpletan

Jawaban:

35

Anda mungkin perlu melakukannya dengan cara ini:

start cmd /c python 1st.py arg1 arg2 ^> out.txt
Patrick Seymour
sumber
Terima kasih, tetapi tidak berfungsi untuk saya (out.txt bahkan tidak dibuat di direktori lokal)
tidak ada
Saya mengujinya dengan CScript dan VBscript, jadi idenya adalah suara. Apakah Anda melakukan sesuatu "ekstra" di baris perintah Anda yang tidak tercantum di sini, seperti tanda kutip ganda?
Patrick Seymour
Maaf, ada yang tidak beres - itu berfungsi!
tidak ada
@ Patrick Seymour, terima kasih atas jawaban Anda! Bagaimana saya bisa melakukan hal yang sama tanpa file .bat? Ini tidak berfungsi dari cmd: python.exe ^> python_out.txt . Saya mengalami kesalahan: python.exe: tidak bisa membuka file '>': [Errno 22] Argumen tidak valid .
neo
7

Redirection diterapkan pada startperintah, tetapi entah bagaimana tidak untuk cmd.exeinstance yang dijalankan.

Jika >operator lolos, semuanya akan berfungsi:

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

(Jika Anda ingin mengarahkan ulang stderr juga, gunakan 2^>untuk itu.)

grawity
sumber
4
Terima kasih, tetapi tidak berhasil untuk saya.
tidak ada
5

Selain itu, jika Anda ingin mengarahkan ulang stderr dan stdout ini berfungsi untuk saya

mulai panggilan delay.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Sepertinya setiap karakter pada dasarnya perlu diloloskan. Perintah ini biasanya terlihat seperti ini:

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

Sando
sumber
5

Apa trik saya untuk memindahkan perintah ke file batch terpisah:

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

the_second.bat kemudian terlihat seperti ini:

python 1st.py %1 %2 > %3
Florian Straub
sumber
Ini adalah solusi yang sangat tidak tepat dibandingkan dengan jawaban yang benar.
DavidPostill
2
"Jawaban yang benar" tidak bekerja untuk saya dengan masalah serupa dan saya pikir itu mungkin solusi yang paling tidak ingin diketahui orang.
Florian Straub
Saya harus tidak setuju. Mempelajari cara yang benar untuk melarikan diri karakter dalam perintah adalah ide yang jauh lebih baik.
DavidPostill
Tolong ajari saya cara menghindari melampirkan output menggunakan >>.
Florian Straub
Aku sudah bilang padamu. Baca jawaban yang diterima.
DavidPostill