리눅스에서 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 던져 새로운 형식 오류 ('표준 입출력 스트림에 대한 잘못된 값 :'+ 표준 입출력을);
문서에서 스트림을 전달할 수 있다고 말합니다. 내가 잘못하고있는 것을 보지 못하고 child_process 소스를 단계별로 실행하는 것이 도움이되지 않습니다.
누군가 도움을 줄 수 있습니까? Linux를 사용 중이라면이 프로그램을 직접 실행할 수 있습니다. 코드를 실행하고 USB 드라이브를 삽입하십시오. 아마도 다른 터미널에서 'udevadm monitor --udev'명령을 실행하여 어떤 일이 발생하는지 볼 수 있습니다. 제거하고 몇 번 다시 삽입하면 결국 노드가 인쇄됩니다.
[여기] (http://unix.stackexchange.com/a/25378)와 같이 stdout 버퍼링을 피하기 위해'stdbuf '를 사용하도록 명령 줄을 변경해 보셨습니까? – mscdex