Windows CMD Batch, start และ output redirection


34

ฉันต้องการเรียกใช้สองโปรแกรมพร้อมกันจากชุดไฟล์และเปลี่ยนเส้นทางผลลัพธ์ของโปรแกรมแรกเป็นไฟล์ข้อความเช่น:

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

ในขณะที่โปรแกรมทำงานตามที่คาดหวังเอาท์พุททั้งหมดจะปรากฏใน stdout


สิ่งนี้ควรจะทำงาน ฉันไม่รู้ว่า 1st.py กำลังทำอะไรตลก ๆ
zpletan

ไม่ แต่มันเขียนถึง stderr
ไม่มี

นั่นเป็นเหตุผล - >เปลี่ยนเส้นทาง stdout เท่านั้น (ฉันคิดว่า) ไม่ว่าในกรณีใดดูเหมือนว่าคุณมีสิ่งที่คุณต้องการอยู่แล้ว
zpletan

คำตอบ:


35

คุณอาจต้องทำเช่นนี้:

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

ขอบคุณ แต่มันใช้งานไม่ได้สำหรับฉัน (out.txt ไม่ได้สร้างในไดเรกทอรีท้องถิ่น)
ไม่มี

ฉันทดสอบด้วย CScript และ VBscript ดังนั้นแนวคิดจึงเป็นเสียง คุณกำลังทำบางสิ่งที่ "พิเศษ" ในบรรทัดคำสั่งของคุณที่ไม่อยู่ในรายการเช่นเครื่องหมายคำพูดคู่
Patrick Seymour

ขออภัยมีบางอย่างผิดปกติอย่างมาก - ใช้งานได้!
ไม่มี

@ Patrick Seymour ขอขอบคุณสำหรับคำตอบของคุณ! ฉันจะทำสิ่งเดียวกันโดยไม่มีไฟล์. bat ได้อย่างไร นี้ไม่ได้ทำงานจากที่ cmd: python.exe ^> python_out.txt ผมมีข้อผิดพลาด: python.exe: ไม่สามารถเปิดแฟ้ม '>': [Errno 22] อาร์กิวเมนต์ไม่ถูกต้อง
ใหม่

7

การเปลี่ยนเส้นทางถูกนำไปใช้กับstartคำสั่ง แต่อย่างใดไม่cmd.exeอินสแตนซ์ที่มันทำงาน

หาก>ผู้ประกอบการหลบหนีทุกอย่างควรทำงาน:

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

(หากคุณต้องการเปลี่ยนเส้นทาง stderr ด้วยให้ใช้2^>มัน)


4
ขอบคุณ แต่มันไม่ได้ผลสำหรับฉัน
ไม่มี

5

นอกจากนี้หากคุณต้องการเปลี่ยนเส้นทางทั้ง stderr และ stdout มันใช้งานได้สำหรับฉัน

เริ่มการโทรล่าช้าค้างคาว ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

ดูเหมือนว่าทุกตัวละครโดยทั่วไปจะต้องหลบหนี โดยปกติคำสั่งนี้จะมีลักษณะดังนี้:

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


5

เคล็ดลับสำหรับฉันคือการย้ายคำสั่งไปยังไฟล์แบตช์แยกกัน:

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

the_second.bat จึงมีลักษณะเช่นนี้:

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

นี่เป็นวิธีแก้ปัญหาที่ไม่เหมาะสมมากเมื่อเทียบกับคำตอบที่ถูกต้อง
DavidPostill

2
"คำตอบที่ถูกต้อง" ไม่ทำงานสำหรับฉันด้วยปัญหาที่คล้ายกันและฉันคิดว่ามันอาจเป็นวิธีการแก้ปัญหาที่คนอย่างน้อยอาจต้องการทราบเกี่ยวกับ
Florian Straub

ฉันไม่เห็นด้วย การเรียนรู้วิธีที่ถูกต้องในการหลบหนีตัวละครในคำสั่งเป็นแนวคิดที่ดีกว่ามาก
DavidPostill

โปรดสอนวิธีหลีกเลี่ยงการแนบผลลัพธ์โดยใช้ >>
Florian Straub

ฉันบอกคุณแล้ว. อ่านคำตอบที่ยอมรับได้
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.