我在windows上使用node.js,我想创建单独的.js脚本,我可以单独处理可执行文件,并将stdout从一个可执行文件作为stdin传递到另一个可执行文件,类似于Unix。 / p>
技术上有一个“|” Windows中的运算符,但根据我的经验,它根本不能正常工作。我试图在node.js中实现自定义方法。语法可以是不同的,例如,
node combine "somescript 1" "someotherscript"
其中combine.js是处理“节点somescript 1”输出到“node someotherscript”输入的脚本。这是我到目前为止的尝试,但我可以使用一些帮助,我对node.js来说相当新,
var child = require('child_process');
var firstArgs = process.argv[2].split(' ');
var firstChild = child.spawn('node', firstArgs);
var secondChild = child.spawn('node');
firstChild.stdout.pipe(secondChild.stdin, { end: false });
secondChild.stdout.pipe(process.stdout, { end: false });
secondChild.on('exit', function (code) {
process.exit(code);
});
谢谢!
答案 0 :(得分:1)
我要做的是为您的脚本使用Node.js Transform流,并根据命令行参数使用combine.js
到require
和pipe
这些流。
示例:
// 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