Windows CMD Batch, START và chuyển hướng đầu ra


34

Tôi muốn chạy đồng thời hai chương trình từ một tệp bó và chuyển hướng đầu ra của chương trình đầu tiên thành một tệp văn bản như:

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

Trong khi các chương trình chạy như mong đợi, tất cả đầu ra được hiển thị trên thiết bị xuất chuẩn.


Điều này nên làm việc. Không biết bất cứ điều gì, tôi tự hỏi nếu 1st.py đang làm điều gì đó buồn cười với đầu ra.
zpletan

Không, nhưng nó viết cho stderr.
không có

Đó là lý do tại sao >chỉ chuyển hướng stdout (tôi nghĩ). Trong mọi trường hợp, có vẻ như bạn đã có những gì bạn cần.
zpletan

Câu trả lời:


35

Bạn có thể cần phải làm theo cách này:

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

Cảm ơn bạn, nhưng nó không hoạt động với tôi (out.txt thậm chí không được tạo trong thư mục cục bộ)
không có

Tôi đã thử nghiệm nó với CScript và VBscript, vì vậy ý ​​tưởng là âm thanh. Bạn đang làm một cái gì đó "thêm" trong dòng lệnh của bạn không được liệt kê ở đây, như dấu ngoặc kép?
Patrick Seymour

Xin lỗi, một cái gì đó đã đi sai lầm - nó hoạt động!
không có

@Patrick Seymour, cảm ơn câu trả lời của bạn! Làm thế nào tôi có thể làm điều tương tự mà không có tập tin .bat? Điều này không hoạt động từ cmd: python.exe ^> python thừng.txt . Tôi đã gặp lỗi: python.exe: không thể mở tệp '>': [Errno 22] Đối số không hợp lệ .
tân

7

Chuyển hướng được áp dụng cho startlệnh, nhưng bằng cách nào đó không phải cho cmd.exetrường hợp nó chạy.

Nếu >toán tử được thoát, mọi thứ sẽ hoạt động:

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

(Nếu bạn muốn chuyển hướng stderr, hãy sử dụng 2^>nó.)


4
Cảm ơn bạn, nhưng nó không làm việc cho tôi.
không có

5

Ngoài ra, nếu bạn muốn chuyển hướng cả stderr và stdout thì điều này hiệu quả với tôi

bắt đầu cuộc gọi trễ.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Dường như mọi nhân vật về cơ bản cần phải được trốn thoát. Lệnh này thường trông như thế này:

độ trễ.bat 1> log.txt 2> & 1


5

Điều gì đã làm cho tôi mẹo là chuyển lệnh thành một tệp bó riêng:

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

the_second.bat sau đó trông như thế này:

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

Đây là một cách giải quyết rất không phù hợp so với câu trả lời đúng.
DavidPostill

2
"Câu trả lời đúng" không phù hợp với tôi với một vấn đề tương tự và tôi nghĩ đó có thể là một giải pháp mà ít nhất mọi người có thể muốn biết.
Florian Straub

Tôi phải không đồng ý. Học cách chính xác để thoát khỏi các ký tự trong lệnh là một ý tưởng tốt hơn nhiều.
DavidPostill

Xin hãy dạy tôi làm thế nào để thoát đầu ra đính kèm bằng cách sử dụng >>.
Florian Straub

Tôi đã nói với bạn. Đọc câu trả lời được chấp nhận.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.