nodejs 怎么打开一个 TTY 流

我有一个 nodejs 程序,同时跑 repl 和打印日志,但是日志会把 repl 弄乱。我想用 repl.start()inputoutput 选项把 repl 移动到另一个 TTY 上。

我现在的做法是用 child_process 开启一个桌面终端,然后里面的 shell 把 tty 命令的输出写入到一个 FIFO 中;父进程读到 FIFO 的内容之后,用 fs.create{Read,Write}Stream 打开流,传入 repl.start

问题是这样打开的流不是 TTY 流,不能接收 readline 操作(移动光标,清屏之类的),stream.isTTY 打印出来是 undefined。

之后又尝试了 /proc/{shell pid}/fd/0,发现也不是 TTY 流。

怎么才能打开 TTY 流?(不要替代方案)

样例代码如下:

const fs = require('fs')
const repl = require('repl')
const getTTYFile = () => {
   // ...
   return '/dev/pts/4'
}

const TTYFile = getTTYFile()

let read = fs.createReadStream(TTYFile)
let write = fs.createWriteStream(TTYFile)
repl.start({
    input: read, output: write,
    useColors: true
})

setInterval(() => console.log('I am log'), 1000)
阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题