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.


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

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.)


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


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.