2013-06-15 3 views
0

Windows에서 node.js를 사용하고 있으며 실행 파일과 같이 개별적으로 처리 할 수있는 별도의 .js 스크립트를 만들고 하나의 실행 파일에서 stdout을 다른 실행 파일로 파이프 처리하고 싶습니다. , 유닉스와 같은 방식으로.Windows에서 Node.js가 여러 스크립트로 연결

기술적으로 "|" Windows에서 작동하지만 내 경험으로는 전혀 작동하지 않습니다. node.js에서 사용자 지정 방식을 구현하려고합니다. 구문 combine.js

node combine "somescript 1" "someotherscript" 

은 "노드 someotherscript"의 입력에 "노드 somescript 1"의 출력을 처리하는 파이프 스크립트, 같은, 상이 할 수있다. 지금까지 시도한 바 있지만 여기서는 약간의 도움을받을 수 있습니다. node.js를 처음 접했습니다.

고마워요! 내가 할 것이 무엇

+0

당신은 실제로 말을하지,하지만이 예제는 작동하지 않는 것 같은데요? 귀하의 질문은 구체적 무엇입니까? '프로세스 '란 무엇입니까? 임의의 명령 인 경우 왜 노드를 산란합니까? – loganfsmyth

+0

프로세스가 현재 실행중인 프로세스를 참조한다고 생각합니다. 예제가 작동하지 않습니다. firstchild의 std 출력은 secondchild의 std 입력이어야하며 secondchild의 std 출력은 현재 프로세스의 std 출력이어야합니다. –

+0

죄송 합니다만, process.js와 같이 스크립트 파일입니다. 따라서 "노드 프로세스"는 process.js를 실행합니다. 그러나 프로세스는 현재 프로세스를 참조하는 방법이기도합니다 (예 : process.argv와 같음). 내가 혼란스러워 보일 수 있습니다, 나는 그 포스트를 편집 할 것입니다. –

답변

1

은 스크립트 Node.js를 Transform 스트림을 사용하고, 명령 줄 인수를 기반으로 requirepipe 그 스트림에 combine.js를 사용합니다.

예 :

// stream1.js 
var Transform = require('stream').Transform; 

var stream1 = new Transform(); 
stream1._transform = function(chunk, encoding, done) { 
    this.push(chunk.toString() + 's1\r\n'); 
    done(); 
}; 

module.exports = stream1; 

// stream2.js 
var Transform = require('stream').Transform; 

var stream2 = new Transform(); 
stream2._transform = function(chunk, encoding, done) { 
    this.push(chunk.toString() + 's2\r\n'); 
    done(); 
}; 

module.exports = stream2; 

// combine.js 

var stream1 = require('./' + process.argv[2]); 
var stream2 = require('./' + process.argv[3]); 

process.stdin.pipe(stream1).pipe(stream2).pipe(process.stdout); 

그 방법을 실행 :

> echo "hi" | node stream1 stream2 

해야 출력 :

hi 
s1 
s2