【发布时间】:2011-03-23 11:02:28
【问题描述】:
我正在创建一个小程序,它读取 STDIN 并为每个数据块增加一个字符串,如下所示:
var fullchunk;
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
if (!fullchunk) {
fullchunk = "";
}
fullchunk += chunk;
});
process.stdin.once('end', function () {
process.stdin.removeAllListeners('data');
eval(fullchunk);
});
但不知何故,我似乎无法在此处使用 end 事件,因为当我通过标准输入发送的文本类似于 http 服务器时,它将无法正常运行,但如果我只使用 @987654324 则效果很好@ 事件而不在 end 事件中声明任何内容。
//STDIN content
require("http").createServer(function(request, response) {
response.writeHead(200);
response.end("Hello World");
}).listen(3000);
所以这绝对是一件事,我无法理解为什么 http 服务器操作会继续运行,但它不响应我的请求,不确定这是否具有由 main 函数继承的变量范围,或者是否end 函数取消所有其他请求。
任何帮助将不胜感激:)
【问题讨论】:
-
也许可以看看这里是如何使用 ChildProcess 处理的:github.com/creationix/node-git/blob/master/lib/git-fs.js
-
非常感谢 orangutancloud,看来这绝对是要走的路,我唯一不明白的是如何将
process.stdin内容传递给我刚刚创建的子进程。是否应该自动继承,否则child.stdin.on("data"...不会触发? -
有一点值得一提的是,TextMate 文本编辑器将程序作为一个 Bundle 触发,在这种情况下,TextMate 将当前打开的文件的内容作为输入发送。恐怕没有办法干预这个过程,也没有办法以编程方式开始一个新的过程。
标签: events process node.js eval stdin