Readline on Stdin

Dette eksempel viser en måde at tage imod input fra kommandolinien.

Opret filen readline-demo.js med følgende indhold.

const readline = require('readline');

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

const getLine = (function () {
  const getLineGen = (async function* () {
    for await (const line of rl) {
      yield line;
    }
  })();
  return async () => ((await getLineGen.next()).value);
})();

const main = async () => {
  console.log('Type value for a');
  let a = Number(await getLine());
  console.log(`Got a: ${a}`);
  
  console.log('Type value for b');
  let b = Number(await getLine());
  console.log(`Got b: ${b}`);

  console.log('Result of a+b');
  console.log(a + b);
  process.exit(0);
};

main();

Nu kan du køre eksemplet med denne kommando:

node readline-demo.js

Når eksemplet kører bliver der bedt om først en værdi for variablen a, dernæst for variablen b.

Hvis eksemplet køres og værdierne 42 og 31 indtastes, giver programmet dette output.

readline-stdin$ node .\readline-demo.js
Type value for a
42
Got a: 42
Type value for b
31
Got b: 31
Result of a+b
73
readline-stdin$

Input via pipe

Hvis du er på windows og bruger powershell kan du også give input til stdin direkte på kommandolinien.

echo "42`n31" | node readline-demo.js

Bemærk powershell har en række escape sekvenser der bruges til at insætte special tegn, `n bruges at indsætte et linieskift i en streng.

Bruger du mac eller linux kan du opnå samme resultat med denne kommando.

printf "42\n31\n" | node readline-demo.js

Materiale