Как вы уже обнаружили в данный момент, невозможно прочитать один символ из Deno.stdin
.
Однако возможно с небольшими затратами имитировать такое поведение: например, обходной путь используйте процесс, который читает символ за символом, добавляет символ ENTER и переводит в deno.
Например, в поле linux с bash:
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
demo.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
.