我有一个 nodejs 程序,同时跑 repl 和打印日志,但是日志会把 repl 弄乱。我想用 repl.start()
的 input
和 output
选项把 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)