如何将node.js子进程连接到特定的tty设备



我想生成一个node.js子进程,并将其stdio附加到一个特定的tty,比如/dev/ttyS0。我知道{ stdio: 'inherit' },但我不想将子对象连接到与父对象相同的tty。我知道pty.js,但我不想让它连接到伪tty,我希望它连接到真实tty。我已经尝试将子进程的stdio管道连接到我用serialport模块打开的tty:

var SerialPort = require('serialport');
var tty = new SerialPort('/dev/ttyS0');
var cp = require('child_process');
var myprocess = cp.spawn('myprocess');
myprocess.stdout.pipe(tty);
myprocess.stderr.pipe(tty);
tty.pipe(myprocess.stdin);

但它不适用于需要访问真实tty的进程,例如sudo。然而,我实际上并不打算专门使用sudo。

我最终找到了如何做到这一点,最初是使用tty模块,但后来我发现任何旧的WriteStream和ReadStream都可以做到,而不仅仅是tty。读/写流。最初,我尝试通过打开两次文件来创建ReadStreamWriteStream,但这不起作用,因为我只需要在r+模式下打开一次文件。这就是我所做的:

var ttyFd = require('fs').open('/dev/ttyS0', 'r+');
require('child_process').spawn('myprocess', [], {stdio: [ttyFd, ttyFd, ttyFd]});

现在,当我在cp.spawn()中放入tty命令时,它会将终端的名称打印到终端。像sudoman这样需要直接终端访问的命令可以完美地工作。

相关内容

  • 没有找到相关文章

最新更新