我在windows上使用node.js,我想创建单独的.js脚本,我可以像可执行文件一样单独对待,并将标准输出从一个可执行文件作为标准输入管道到另一个可执行文件,以类似unix的方式。
在Windows中技术上有一个"|"操作符,但根据我的经验,它根本不能很好地工作。我试图在node.js中实现自定义方法。语法可以不同,比如
node combine "somescript 1" "someotherscript"
其中combine.js是处理"node someotherscript 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);
});
谢谢!
我要做的是使用Node.js转换流为您的脚本,并使用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() + 's1rn');
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() + 's2rn');
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);
That way running:
> echo "hi" | node stream1 stream2
应该输出:
hi
s1
s2