W RingoJS jest function o nazwie read
, który umożliwia odczytanie całego strumienia do momentu, w którym zostanie osiągnięty koniec. Jest to przydatne, gdy tworzysz aplikację w linii poleceń. Na przykład można napisać tac
program następująco:Jak odczytać cały strumień tekstowy w pliku node.js?
#!/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
To pozwala odpalić konsolę i uruchom komendę tac
. Następnie wpisać wiele linii, jak chcesz i po skończysz można nacisnąć Ctrl + D (lub Ctrl + Z w systemie Windows), aby zasygnalizować end of transmission.
Chcę zrobić to samo w węźle node.js, ale nie mogę znaleźć żadnej funkcji, która by to zrobiła. Myślałem o użyciu readSync
function z biblioteki fs
symulować następująco, ale bezskutecznie:
fs.readSync(0, buffer, 0, buffer.length, null);
file descriptor for stdin (pierwszy argument) jest 0
. Powinien więc odczytać dane z klawiatury. Zamiast tego daje mi następujący błąd:
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)
Jak byś synchronicznie zebrać wszystkie dane w strumieniu tekstu wejściowego i zwraca go jako ciąg w node.js? Przykład kodu byłby bardzo pomocny.
Nie można synchronicznie czytać w strumieniu asynchronicznym. Dlaczego tak chcesz? – tjameson
Próbuję zrobić to samo. Powodem jest stworzenie interaktywnej opcji w moim programie, przydatnej z wielu powodów. Asynchroniczny czytnik nie pomaga za bardzo. – ton
tutaj sposób https: //www.npmjs.com/pakiet/readline-sync: http://stackoverflow.com/questions/8452957/synchronously-reading-stdin-in-windows/27931290#27931290 – ton