2012-11-19 41 views
0

我试图使用spawn命令从nodejs执行命令行命令(此处为cat)。将缓冲区限制到nodejs子进程的输出

var spawn = require('child_process').spawn; 
var cat = spawn('cat'); 
result = new Buffer(2048); 
cat.stdout.on('data', function (data) 
{ 
    data.copy(result); 
}); 
cat.on('exit', function (code) 
{ 
    console.log(result.toString()); 
}); 
cat.stdin.write(InBUFFER); 
cat.stdin.end(); 

该命令的输出似乎在缓冲区中的某处,但其余的输出也是如此。是否有某种空字符可用于确定输出何时结束?

更新:澄清事情:在输出中有很多随机字符,它们似乎是缓冲区的一部分。我正在寻找一种方法来将命令行命令的有用输出与其余缓冲区分开。

+0

”该命令的输出似乎在缓冲区中的某处,但其余的输出也是如此。“我已经多次阅读过,我无法弄清楚它的含义。剩下的是什么?输出什么? –

+0

对不起。我的意思是缓冲区的其余部分。这似乎是随机废话。类似于未初始化的变量。输出意味着通过console.log发送到控制台的内容。 – funkysash

回答

1

这取决于你在InBUFFER里面有什么,你没有显示。

如果你有一个InBUFFER字符串,例如"test",该result将包含test之后很多个零,最多2048(中数字0将被转换为空时toString被调用)。
如果垃圾在InBUFFER之内,你会得到垃圾作为输出。也许你正在阅读一个文件,而不是正确设置字符编码。 “

+0

如果用'InBUFFER = new Buffer(“test”)填充inBuffer;'我的输出以测试开始,然后以随机数字和符号继续。示例如上。我知道我可以限制它的长度,但对于不知道结果长度的情况(例如'ls'),这不起作用。 – funkysash

+0

如果通过result.fill(0)填充结果,那么它就起作用。但是,这看起来不适合这个问题。 – funkysash

+0

实际上我认为是这样,因为缓冲区可能不能保证填充零(默认情况下)。要么是这样,要么只是传递字符串的长度:'result.toString('utf8',0,InBUFFER.length)' – mihai