在Node.js中从标准输入流(stdin)读取的正确方法

4

https://github.com/nodejs/node/issues/7439

上面的页面显示fs.readFileSync(process.stdin.fd)不能正确工作。 fs.readFileSync(fs.openSync('/dev/stdin', 'rs'))是从stdin读取的正确方式吗?但它似乎只在某些情况下有效,而不是所有情况。
我想知道在nodejs中从stdin读取的正确方式是什么。
2个回答

2

您可以使用readline

https://nodejs.org/api/readline.html

从这些文档中:

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

并且要读取行:

for await (const line of rl) {
  // Each line in input.txt will be successively available here as `line`.
  console.log(`Line from file: ${line}`);
}

2

process 全局对象有一个 stdin 接口。当用户输入文本并按下键盘上的 Enter 键后,它将记录一行日志。

let buffer = ''
process.stdin.resume()
process.stdin.on('data', (d) => buffer = buffer.concat(d.toString()))

setTimeout(() => {
    // Exit after 5 seconds and print entered content
    console.log(buffer.toString('utf8'))
    process.exit(0)
}, 5000)

文档 - https://nodejs.org/api/process.html#process_process_stdin


我想将整个stdin读入一个字符串中。这样做会读取整个stdin吗? - user1424739
检查我的更新答案。它展示了如何在5秒内捕获所有输入。如果你正在做其他事情,可以删除setTimeout,我只是举个例子。 - Evan Shortiss
如果输入需要超过5秒才能处理,会发生什么? - user1424739
1
只需移除超时设置。这只是一个示例,用于强制关闭程序。如果不设置超时,程序将一直读取,直到触发您定义的某个条件。 - Evan Shortiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接