Trong RingoJS có function được gọi là read
cho phép bạn đọc toàn bộ luồng cho đến khi kết thúc đạt được. Điều này rất hữu ích khi bạn đang tạo một ứng dụng dòng lệnh. Ví dụ, bạn có thể viết một tac
program như sau:Cách đọc toàn bộ luồng văn bản trong 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
này cho phép bạn cháy lên một vỏ và chạy lệnh tac
. Sau đó, bạn gõ vào như nhiều dòng như bạn muốn và sau khi bạn đã hoàn tất, bạn có thể nhấn tổ hợp phím Ctrl + D (hoặc Ctrl +Z trên Windows) để báo hiệu end of transmission.
Tôi muốn làm điều tương tự trong node.js nhưng tôi không thể tìm thấy bất kỳ chức năng nào có thể làm như vậy. Tôi nghĩ đến việc sử dụng readSync
function từ thư viện fs
để mô phỏng như sau, nhưng không có kết quả:
fs.readSync(0, buffer, 0, buffer.length, null);
Các file descriptor for stdin (đối số đầu tiên) là 0
. Vì vậy, nó nên đọc dữ liệu từ bàn phím. Thay vào đó, nó cung cấp cho tôi lỗi sau:
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)
Làm cách nào bạn đồng bộ thu thập tất cả dữ liệu trong luồng văn bản đầu vào và trả về dưới dạng chuỗi trong node.js? Một ví dụ mã sẽ rất hữu ích.
Bạn không thể đọc đồng bộ trong luồng không đồng bộ. Tại sao bạn muốn sao? – tjameson
Tôi đang cố gắng làm điều tương tự. Lý do là tạo ra một tùy chọn tương tác trong chương trình của tôi, hữu ích vì nhiều lý do. Một người đọc không đồng bộ không giúp quá nhiều. – ton
đây là cách https: //www.npmjs.com/package/readline-sync: http://stackoverflow.com/questions/8452957/synchronously-reading-stdin-in-windows/27931290#27931290 – ton