我正在检查Linux上USB驱动器的拆卸。我只是使用child_process.spawn监视命令行过程的输出。但是由于某种原因,直到打印了20行,孩子的stdout数据事件才会发出,这使其无法检测到卸下的驱动器。多次卸下驱动器后,它终于走了。但这显然不会。
原文:
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('stdio流的值不正确:'+ stdio);
文档说您可以传递流。我看不到我做错了,单步执行child_process源无济于事。
有人可以帮忙吗?如果您使用的是Linux,则可以自己运行。运行代码并插入USB驱动器。也许您可以在另一个终端上运行命令“ udevadm monitor --udev”以查看会发生什么。删除并重新插入几次,最终将打印出节点。
mscdex,我爱你。将spawn命令更改为
spawn("stdbuf", ["-oL", "-eL", "udevadm", "monitor", "--udev"]);
有花招。非常感谢您的帮助!
我可以使用哪种Windows解决方案。很抱歉在答案框中提出问题