首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询主设备属性

查询主设备属性
EN

Stack Overflow用户
提问于 2020-07-23 18:18:43
回答 1查看 87关注 0票数 0

我正在尝试使用Primary Device Attributes ANSI escape code在Node.js中查询sixel支持,但是我找不到一种方法来捕获终端响应。

在Linux环境中,它就像这样简单

代码语言:javascript
复制
echo -e '\e[0c'

然而,在Node.js中,执行命令并捕获其标准输入应答似乎比听起来更难。

因为并不是所有的OSes和环境都支持-e选项,所以我需要创建一个Node.js实现,以不同的方式完成这项工作。

我从尝试使用readline开始

代码语言:javascript
复制
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键。

我也尝试过流式传输和记录它,但都没有用

代码语言:javascript
复制
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,但据我所知,它不支持标准输入输出。

我到底该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 16:54:14

这里有一个简单的解决方案(由@jerch建议):

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63051961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档