Node.js API详解之 tty功能与用法实例分析


Posted in Javascript onApril 27, 2020

本文实例讲述了Node.js API详解之 tty功能与用法。分享给大家供大家参考,具体如下:

tty 可以理解为终端的意思。tty 模块提供终端相关的接口,用来获取终端的行数列数等。

通过 const tty = require(‘tty'); 的方式引用 tty 模块

process.stdout.isTTY

说明:

此属性位于 process 模块,用来判断 Node.js 是否运行在一个 TTY 环境中

demo:

console.log(process.stdout.isTTY)
//true

tty.ReadStream 类

说明:

tty.ReadStream 类是 net.Socket 的一个子类,表示 TTY 的可读部分。

正常情况下,process.stdin 是 Node.js 进程中唯一的 tty.ReadStream 实例,无需创建更多的实例

也就是说不需要我们手动 new 一个实例,直接使用 process.stdin 即可。

readStream.isRaw

说明:

是否为原始模式,默认值为 false 。如果TTY被配置成原始模式,该属性值为 true

demo:

console.log(process.stdin.isRaw)
//false

readStream.setRawMode(mode)

说明:

该方法用来将 TTY 配置为原始模式。原始模式下,输入按字符逐个生效,终端对字符的所有特殊处理会被禁用,包括应答输入的字符。 该模式中 CTRL+C 不再产生 SIGINT。

mode:传递 true 或者 false 来关闭和开启原始模式,对应 readStream.isRaw 的值也会发生改变。

demo:

process.stdin.setRawMode(true); // 开启原始模式
console.log(process.stdin.isRaw);
//true
 
process.stdin.setRawMode(false); // 关闭原始模式
console.log(process.stdin.isRaw);
//false

tty.WriteStream 类

说明:

tty.WriteStream 类是 net.Socket 的一个子类,表示 TTY 的可写部分。

正常情况下,process.stdout 和 process.stderr 是 Node.js 进程中唯一的 tty.WriteStream 实例,无需创建更多的实例。

writeStream.columns

说明:

此属性用来表示当前TTY具有的列数,当resize时间被触发时,该属性会被更新。

demo:

console.log(process.stdout.columns);
//88

writeStream.rows

说明:

次属性用来表示当前TTY具有的行数,当resize时间被触发时,该属性会被更新。

demo:

console.log(process.stdout.rows);
//40

Event: resize

说明:

当TTY窗口发生变化时,会触发resize事件。

demo:

process.stdout.on('resize', () => {
 console.log('窗口大小发生变化!');
 console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});
// > 窗口大小发生变化!
// 86x40
// > 窗口大小发生变化!
// 85x40
// > 窗口大小发生变化!
// 84x40

tty.isatty(fd)

说明:

如果给定的 fd 有关联 TTY,则返回 true,否则返回 false。

fd 数值类型的文件描述符。

demo:

console.log(tty.isatty(2));
//true
console.log(tty.isatty(200));
//false

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
jQuery 学习 几种常用方法
Jun 11 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
JavaScript随机生成信用卡卡号的方法
Apr 07 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
javascript动态添加删除tabs标签的方法
Jul 06 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 #Javascript
element 中 el-menu 组件的无限极循环思路代码详解
Apr 26 #Javascript
微信小程序个人中心的列表控件实现代码
Apr 26 #Javascript
vue项目中自定义video视频控制条的实现代码
Apr 26 #Javascript
vue项目启动出现cannot GET /服务错误的解决方法
Apr 26 #Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
Apr 26 #Javascript
jquery检测上传文件大小示例
Apr 26 #jQuery
You might like
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
php实现三级级联下拉框
2016/04/17 PHP
PHP类的特性实例分析
2016/09/28 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
举例介绍Python中的25个隐藏特性
2015/03/30 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python入门之后再看点什么好?
2018/03/05 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
python 实现两个npy档案合并
2020/07/01 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
教师求职自荐信
2014/03/09 职场文书
电工技术比武方案
2014/05/11 职场文书
安全环保演讲稿
2014/08/28 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
护理实习生带教计划
2015/01/16 职场文书
2015年教研工作总结
2015/05/23 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫