0

我在 Windows 上使用 node.js,我想创建单独的 .js 脚本,我可以像可执行文件一样单独对待它们,并将标准输出从一个可执行文件作为标准输入传送到另一个可执行文件,以类似 Unix 的方式。

从技术上讲,有一个“|” Windows 中的运算符,但根据我的经验,它根本无法正常工作。我正在尝试在 node.js 中实现自定义方法。语法可以不同,例如,

node combine "somescript 1" "someotherscript"

其中 combine.js 是处理将“node 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);
 });

谢谢!

4

1 回答 1

1

我要做的是为您的脚本使用 Node.js转换combine.js流,requirepipe根据命令行参数使用这些流。

例子:

// 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
于 2013-07-03T18:49:07.570 回答