我正在尝试使用Primary Device Attributes ANSI escape code在Node.js中查询sixel支持,但是我找不到一种方法来捕获终端响应。
在Linux环境中,它就像这样简单
echo -e '\e[0c'然而,在Node.js中,执行命令并捕获其标准输入应答似乎比听起来更难。
因为并不是所有的OSes和环境都支持-e选项,所以我需要创建一个Node.js实现,以不同的方式完成这项工作。
我从尝试使用readline开始
const readline = require("readline")
const ESC = '\u001B[';
const askText = prompt => new Promise((resolve) => {
const rl = readline.createInterface(process.stdin, process.stdout)
rl.question(prompt, (answer) => {
resolve(answer)
rl.close()
})
})
askText(ESC + "0c").then(console.log)但这只是显示了一个提示,并等待用户按enter键。
我也尝试过流式传输和记录它,但都没有用
const readline = require("readline")
const toReadableStream = require("to-readable-stream")
const wstream = require("fs").createWriteStream("a.txt")
const rl = readline.createInterface({
input: toReadableStream(code), output: wstream
})
rl.on("line", (line) => {
console.log(`Received: ${JSON.stringify(line)}`);
})我还研究了使用child_process.exec,但据我所知,它不支持标准输入输出。
我到底该怎么做呢?
发布于 2020-07-24 16:54:14
这里有一个简单的解决方案(由@jerch建议):
const ESC = "\u001B["
stdin.setEncoding("utf8")
stdin.setRawMode(true)
stdin.once("data", data => {
// Handle resulting data...
stdin.setRawMode(false)
stdin.destroy()
})
stdout.write(ESC + '0c')https://stackoverflow.com/questions/63051961
复制相似问题