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