Khi thực thi tệp lô với tác vụ apply
hoặc exec
của kiến trên Windows, tôi thấy có trường hợp đặc biệt trong đó một số stdout và stderr không bị bắt bởi kiến. (Ví dụ: nếu bạn gọi một tập tin batch mà lần lượt gọi các lệnh khác (như node.exe
), sau đó stdout và stderror từ quá trình con node.exe
bị mất.)
Tôi đã dành một thời gian dài cố gắng để gỡ lỗi này! Có vẻ như stdout của tập tin batch và stderr bị bắt, tuy nhiên các lệnh được gọi bởi tập tin thực thi bằng cách nào đó không được nhìn thấy bởi ant. (có lẽ vì chúng là các quá trình con riêng biệt). Sử dụng các thuộc tính output
và error
như được đề xuất ở trên không giúp đỡ vì chỉ một số số của giá trị stdout và/hoặc tiêu chuẩn bị bắt.
Các giải pháp tôi đã đưa ra (một Hack) là thêm những lập luận ở phần cuối của lệnh:
<!--Next arg: forces node's stderror and stdout to a temporary file-->
<arg line=" > _tempfile.out 2<&1"/>
<!--Next arg: If command exits with an error, then output the temporary file to stdout, -->
<!--delete the temporary file and finally exit with error level 1 so that -->
<!--the apply task can catch the error if @failonerror="true" -->
<arg line=" || (type _tempfile.out & del _tempfile.out & exit /b 1)"/>
<!--Next arg: Otherwise, just type the temporary file and delete it-->
<arg line=" & type _tempfile.out & del _tempfile.out &"/>
Bởi vì đây Hack chỉ áp dụng cho các cửa sổ, hãy nhớ thêm @osfamily="windows"
để nhiệm vụ apply
hoặc exec
. Và tạo các tác vụ tương tự cho `@ osfamily =" unix ", vv nhưng không có các đối số thừa này.
hiến Sản lượng kiến không phải là toàn bộ sản lượng. Nếu tôi chuyển hướng nó đến một tập tin, tôi nhận được một điều hoàn toàn khác. – Geo
Điều này đúng cho các hệ thống Unix. Nhưng trên các hệ thống cửa sổ, nếu bạn gọi một tập tin batch mà lần lượt gọi các lệnh khác (như 'node.exe'), thì stdout và stderror từ tiến trình node.exe con bị mất. Xem _hack_ tôi mô tả như là một câu trả lời nếu bạn đang ở trên cửa sổ và có vấn đề này. – darcyparker