我在用yoctoo 3.10开发英特尔爱迪生,我在/dev/hidraw0上有一个条形码扫描器,我想使用运行hexdump /dev/hidraw0时输出的精确行作为用node js编写的程序的输入。
node js程序如下:

var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

rl.on('line', function(line){
    console.log(line);
})

我试过正常的配管:
hexdump /dev/hidraw0 | node program.js

但我什么也没有得到,我认为这与hexdump不写,所以缓冲区不写它的内容有关。
我还尝试将/dev/hidraw0作为文件打开,如下所示:
var fs = require('fs');
fs.open('/dev/hidraw0', 'r', function(status, fd) {
    if (status) {
        console.log(status.message);
        return;
    }
    var buffer = new Buffer(100);
    fs.read(fd, buffer, 0, 100, 0, function(err, num) {
        console.log(buffer.toString('hex'));
    });
});

使用一些hex转储程序,比如hexy,但是在这个例子中,我得到了一些hex行,但是和hexdump不一样,这是我需要的。
使用hexdump /dev/hidraw0可以得到以下结果
(当我使用卡片时)
0000000 0000 0020 0000 0000 0000 0000 0000 0000
0000010 0000 0020 0000 0000 0000 001f 0000 0000
0000020 0000 0027 0000 0000 0000 0026 0000 0000
0000030 0000 0025 0000 0000 0000 0000 0000 0000
0000040 0000 0025 0000 0000 0000 0024 0000 0000
0000050 0000 0021 0000 0000 0000 0025 0000 0000
0000060 0000 0028 0000 0000 0000 0000 0000 0000

最佳答案

以下对我有效:

process.stdin.setEncoding('utf8');
process.stdin.on('readable', function () {
  var chunk = process.stdin.read();
  if (chunk !== null) {
    console.log(chunk);
  }
});

跑步:
sudo hexdump /dev/hidraw0 | node this-script.js

示例输出(移动无线鼠标时):
0000000 0120 0002 fd00 ffcf 0000 0000 0000 2000
0000010 0201 0000 cffc 00ff 0000 0000 0000 0120
...

10-04 13:32