73 Stimmen

node.js: readSync von stdin?

Ist es möglich, synchron von stdin in node.js zu lesen? Weil ich schreibe ein Brainfuck zu JavaScript-Compiler in JavaScript (nur zum Spaß). Brainfuck unterstützt eine Leseoperation, die synchron implementiert werden muss.

Ich habe dies versucht:

const fs = require('fs');
var c = fs.readSync(0,1,null,'utf-8');
console.log('character: '+c+' ('+c.charCodeAt(0)+')');

Dies führt jedoch nur zu dieser Ausgabe:

fs:189
  var r = binding.read(fd, buffer, offset, length, position);
              ^
Error: EAGAIN, Resource temporarily unavailable
    at Object.readSync (fs:189:19)
    at Object.<anonymous> (/home/.../stdin.js:3:12)
    at Module._compile (module:426:23)
    at Module._loadScriptSync (module:436:8)
    at Module.loadSync (module:306:10)
    at Object.runMain (module:490:22)
    at node.js:254:10

0 Stimmen

Sparen Sie sich Zeit und verwenden Sie eine gut gepflegte npm-Bibliothek, die das Lesen von stdin abstrahiert, npmjs.com/package/get-stdin .

0voto

Vikas Gautam Punkte 1599

Ich schrieb dies Modul um eine Zeile nach der anderen aus einer Datei oder stdin zu lesen. Das Modul ist benannt als line-reader die eine ES6 *Generator function um eine Zeile nach der anderen zu iterieren. Hier ist ein Codebeispiel (in TypeScript) aus readme.md.

import { LineReader } from "line-reader"

// FromLine and ToLine are optional arguments
const filePathOrStdin = "path-to-file.txt" || process.stdin
const FromLine: number = 1 // default is 0
const ToLine: number = 5 // default is Infinity
const chunkSizeInBytes = 8 * 1024 // default is 64 * 1024

const list: IterableIterator<string> = LineReader(filePathOrStdin, FromLine, ToLine, chunkSizeInBytes)

// Call list.next to iterate over lines in a file
list.next()

// Iterating using a for..of loop
for (const item of list) {
   console.log(item)
}

Neben dem obigen Code können Sie auch einen Blick auf src > tests Ordner im Repo .

Anmerkung:-
Zeilenleser Modul liest nicht alles in den Speicher, sondern verwendet eine Generatorfunktion, um Zeilen asynchron oder synchron zu erzeugen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X