【发布时间】:2020-07-23 10:18:42
【问题描述】:
我正在尝试使用 Primary Device Attributes ANSI escape code 在 Node.js 中查询 sixel 支持,但我找不到捕获终端响应的方法。
在Linux环境下,就这么简单
echo -e '\e[0c'
但是,在 Node.js 中执行命令并捕获其标准输入回复似乎比听起来更难。
由于并非所有操作系统和环境都支持 -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)
但这只是显示一个提示并等待用户按回车。
我也尝试过流式传输并记录它无济于事
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 进行了调查,但据我所知它不支持标准输入。
我应该怎么做呢?
【问题讨论】:
-
更合适的是exec
-
@Molda 如何从 exec 调用中获取结果标准输入?
-
您必须使用
require('tty')并将 tty 临时设置为原始模式。在原始模式下,请求 DA 并读取响应,然后再次离开原始模式。 -
require('child_process').exec("echo -e '\e[0c'", (err, stdout, stderr) => { console.log(stdout)})但我不确定命令应该返回什么。此外,您可能需要转义'\e',我的意思是使用双反斜杠。它在 Windows 上的 ubuntu 中返回1;0c。 -
@Molda 来自问题:由于并非所有操作系统和环境都支持 -e 选项,因此我需要创建一个以不同方式执行此操作的 Node.js 实现。
标签: javascript node.js terminal