0

我正在尝试从标准输入中读取单个字符。根据此问题https://github.com/denoland/deno/issues/3614,如果不使用文件结束信号(例如ENTER. 任何人都知道我如何捕获特殊命令,例如ctrl + c

4

1 回答 1

0

正如您目前已经发现的那样,不可能从中读取单个字符Deno.stdin

然而,模拟这种行为可能需要一点开销:例如,一种解决方法是使用一个逐个字符读取字符、附加 ENTER 字符并通过管道进入 deno 的进程。

例如在带有 bash 的 linux 机器上:

terminal> ./read1char.sh | deno demo.ts

read1char.sh:

#!/bin/bash

while true
do
   read -n1 varname

   # echo append a newline to input char
   echo "$varname"
done

演示.ts:

async function handle_signal() {
  for await (const _ of Deno.signal(Deno.Signal.SIGINT)) {
    console.log("interrupted!");
  }
}

async function main() {
  const decoder = new TextDecoder();
  const encoder = new TextEncoder();

  const file = Deno.stdin;
  while (true) {
    const c = new Uint8Array(1);
    if (await file.read(c) == Deno.EOF) {
      break;
    }
    const char = decoder.decode(c);
    if (char != "\n") {
      Deno.stdout.write(encoder.encode(char.toUpperCase()));
    }
  }
}

main();
handle_signal();

handle_signal是一个简单的信号处理程序,用于捕获SIGINT.

于 2020-04-06T18:41:52.873 回答