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)"

1.png

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() 
  } 
});

输出:

2.png

标签: Nodejs, Nodejs安装教程, Nodejs教程, node, nodejs入门, nodejs入门教程, nodejs进阶, nodejs学习教程, nodejs开发, nodejs指南, nodejs学习指南, nodejs环境配置, nodejs框架