我正在检查Linux上的USB驱动器删除。我只是用child_process.spawn监视命令行进程的输出。但是由于某种原因,直到20行被打印出来,这个孩子的标准输出数据事件才会发出,这使得它无法检测到移除的驱动器。多次拆下驱动器后,它终于结束了。但显然这不会。节点产卵stdout.on数据延迟
原文:
var udevmonitor = require("child_process").spawn("udevadm", ["monitor", "--udev"]);
udevmonitor.stdout.on("data", function(data) {
return console.log(data.toString());
});
很简单。所以我认为这是管道节点在内部使用的问题。因此,我不使用管道,而是使用简单的传递流。这可以解决问题,并给我实时输出。这代码:
var stdout = new require('stream').PassThrough();
require("child_process").spawn("udevadm", ["monitor", "--udev"], { stdio: ['pipe', stdout, 'pipe'] });
stdout.on("data", function(data) {
console.log(data.toString());
});
但是,这给了我一个错误: child_process.js:922抛出新的TypeError( '为标准输入输出流不正确的值:' +标准输入输出);
该文档说你可以传入一个流。我没有看到我在做什么错误,并且逐步通过child_process源并没有帮助。
有人可以帮忙吗?你可以自己运行,只要你在Linux上。运行代码并插入USB驱动器。也许你可以在另一个终端运行'udevadm monitor --udev'命令来看看会发生什么。删除并重新插入几次,最终节点将打印出来。
您是否尝试更改命令行以使用'stdbuf'来避免标准输出缓冲,如[here](http://unix.stackexchange.com/a/25378)所示? – mscdex 2014-12-05 23:31:32