RingoJS中有一个名为read
的函数,它允许您在流达到末尾时读取整个流。当您制作命令行应用程序时,这非常有用。例如,您可以编写一个tac
程序,如下所示:
#!/usr/bin/env ringo
var string = system.stdin.read(); // read the entire input stream
var lines = string.split("\n"); // split the lines
lines.reverse(); // reverse the lines
var reversed = lines.join("\n"); // join the reversed lines
system.stdout.write(reversed); // write the reversed lines
这使您可以启动一个 shell 并运行 tac
命令。然后,您可以输入任意数量的行,完成后按下 Ctrl+D(在 Windows 上是 Ctrl+Z)来表示传输结束。
我想在 node.js 中做同样的事情,但我找不到能够执行此操作的任何函数。我想过使用 fs
库中的 readSync
函数 来模仿,但无济于事:
fs.readSync(0, buffer, 0, buffer.length, null);
标准输入流的文件描述符(第一个参数)是0
。因此,它应该从键盘读取数据,但是它给我以下错误:
Error: ESPIPE, invalid seek
at Object.fs.readSync (fs.js:381:19)
at repl:1:4
at REPLServer.self.eval (repl.js:109:21)
at rli.on.self.bufferedCmd (repl.js:258:20)
at REPLServer.self.eval (repl.js:116:5)
at Interface.<anonymous> (repl.js:248:12)
at Interface.EventEmitter.emit (events.js:96:17)
at Interface._onLine (readline.js:200:10)
at Interface._line (readline.js:518:8)
at Interface._ttyWrite (readline.js:736:14)
你如何在node.js中同步收集输入文本流中的所有数据并作为字符串返回?一个代码示例将非常有帮助。