node.js - 이벤트 - 오류:노드 출력을 "|"로 파이프 할 때 EPIPE를 작성하십시오. 머리"



node.js 이벤트 루프 (2)

닫힌 파이프의 경우 성공적으로 종료되도록 프로그램을 변경하려면 다음을 시도하십시오.

process.stdout.on('error', function( err ) {
    if (err.code == "EPIPE") {
        process.exit(0);
    }
});

https://src-bin.com

오류가 발생하는 데 문제가 있습니다.

events.js:48
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: write EPIPE
    at errnoException (net.js:670:11)
    at Object.afterWrite [as oncomplete] (net.js:503:19)

배관으로 출력 할 때. 간단한 시도는 다음과 같습니다.

console.log('some string');
... the same for 20 lines

node test.js | head 우분투 12.04에서 약 70 % 정도 실행되는 것으로 보이는 오류가 발생했습니다. 뭐가 문제 야?


Answer #1

head 명령은 처음 몇 줄만 읽습니다. 코드는 모든 출력을 읽을 것으로 예상하고 출력을 생성 할 수없는 경우 오류를 트리거합니다. 프로그램에서 출력물을 버리는 것이 합법적이라면 프로그램에서 치명적인 오류로 취급하지 마십시오. 프로그램에서 출력물을 버리는 것이 합법적이지 않은 경우에는 head 파이프하지 마십시오.

현재 경쟁 조건이 있습니다. 프로그램이 출력 쓰기를 끝내기 전에 head 가 입력을 무시하기 시작하면 프로그램에서 예외가 발생합니다. head 가 입력을 무시하기 전에 프로그램이 출력을 끝내면 모든 것이 head 입니다.

어리석은 임시 수정으로 : node test.js | tee /dev/null | head node test.js | tee /dev/null | head
자, tee 는 모든 프로그램의 결과를 가져갈 것입니다.