Nodejs教程-Node.js TTY
Node.js 的 TTY 模块包含了 tty.ReadStream 和 tty.WriteStream 类。在大多数情况下,不需要直接使用该模块。
你需要使用 require('tty')
来访问该模块。
检查是否在 TTY 上下文中运行
当 Node.js 发现自己在 TTY 上下文中运行时:
- process.stdin 将是 tty.ReadStream 的实例
- process.stdout 将是 tty.WriteStream 的实例
要检查 Node.js 是否在 TTY 上下文中运行,使用以下命令:
node -p -e "Boolean(process.stdout.isTTY)"
ReadStream 类
tty.ReadStream 类是 net.Socket 的子类,表示 TTY 的可读部分。在正常情况下,tty.ReadStream 仅在任何 Node.js 程序中有一个实例,即 process.stdin(仅当 isatty(0) 为 true 时)。
rs.isRaw: 这是一个布尔值,初始化为 false。它指定了 tty.ReadStream 实例的当前 "raw" 状态。
rs.setRawMode(mode): 参数应为 true 或 false。它用于将 tty.ReadStream 的属性设置为作为原始设备或默认设备。isRaw 将设置为结果模式。
WriteStream 类
tty.WriteStream 类是 net.Socket 的子类,表示 TTY 的可写部分。在正常情况下,tty.WriteStream 仅在任何 Node.js 程序中有一个实例,即 process.stdout(仅当 isatty(1) 为 true 时)。
Resize 事件: 当 columns 或 rows 属性发生变化时,将触发该事件。
process.stdout.on('resize', () => {
console.log('屏幕尺寸已更改!');
console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});
ws.columns: 获取当前 TTY 的列数。该属性会在 'resize' 事件上更新。
ws.rows: 获取当前 TTY 的行数。该属性会在 'resize' 事件上更新。
Node.js TTY 示例
文件: tty.js
var tty = require('tty');
process.stdin.setRawMode(true);
process.stdin.resume();
console.log('我现在要离开了');
process.stdin.on('keypress', function(char, key) {
if (key && key.ctrl && key.name == 'c') {
process.exit()
}
});
输出: