Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用node.js读取应用程序标准输出数据

使用node.js读取应用程序标准输出数据
EN

Stack Overflow用户
提问于 2013-07-03 19:44:50
回答 1查看 588关注 0票数 0

让我们以"top“应用程序为例,它显示系统信息并定期更新。

我想使用node.js运行它,并显示该信息(以及更新!)。我想出的代码如下:

代码语言:javascript
运行
AI代码解释
复制
#!/usr/bin/env node

var spawn = require('child_process').spawn;

var top = spawn('top', []);

top.stdout.on('readable', function () {
    console.log("readable");
    console.log('stdout: '+top.stdout.read());
});

它的行为和我预期的不一样。事实上,它不会产生任何结果:

代码语言:javascript
运行
AI代码解释
复制
readable
stdout: null
readable
stdout:
readable
stdout: null

然后退出(这也是出乎意料的)。

以top应用程序为例。目标是通过节点代理这些更新,并将它们显示在屏幕上(因此与直接从命令行运行top的方式相同)。

我最初的目标是编写使用scp发送文件的脚本。这样做,然后注意到我遗漏了scp本身显示的进度信息。看了看scp节点模块,他们也没有代理它。所以回溯到像top这样的常见应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 20:06:05

top是一个交互式控制台程序,设计用于在实时伪终端上运行。

至于您的stdout读取,top发现它的stdin不是tty,并以错误退出,因此在stdout上没有输出。您可以在shell中看到这种情况,如果您执行echo | top,它将退出,因为标准输入将不是tty。

即使它实际正在运行,它的输出数据也将包含用于操作固定维度控制台的控制字符。(如“将光标移动到第2行的开头”)。它是一个交互式用户界面,作为编程数据源是一个糟糕的选择。“屏幕抓取”和解释这些数据并提取有意义的信息将是相当困难和脆弱的。您是否考虑过一种更干净的方法,比如从/proc/meminfo文件和内核为此公开的其他特殊文件中获取所需的数据?最终,top将从现成的特殊文件和系统调用中获取所有这些数据,因此您应该能够利用便于编程访问的数据源,而不是试图筛选顶部。

当然,现在top有分析代码来做平均值等等,你可能必须重新实现,所以屏幕抓取和查看干净的数据源都有优缺点,也有容易和困难的方面。但我的0.02美元将专注于良好的数据源,而不是试图屏幕抓取控制台UI。

要考虑的其他选项/资源:

诸如free -m

  • vmstat

  • the expect program之类的终端命令旨在帮助自动化需要终端

的控制台程序

为了清楚起见,确实可以将top作为子进程运行,欺骗它认为有tty和所有相关的环境设置,并获取它正在写入的数据。它非常复杂,类似于试图通过在电视屏幕上拍摄天气频道的照片并在其上运行光学字符识别来获取天气。风格,但还有更简单的方法。如果您需要研究更多关于诱使控制台程序作为子进程运行的信息,请查看expect命令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17456820

复制
相关文章
为何NIPT不是一项诊断性质的检测,而只是筛查技术
NIPT(Noninvasive prenatal Testing)主要是针对怀孕12孕周以上的孕妇,抽取其外周血,检测胎儿是否有染色体(主要是针对13、18、21、X、Y等染色体)非整倍体发生的检测技术,一般采用基于低深度全基因组测序的下一代测序技术(Next Generation Sequencing,简称NGS)来实现,国外也有基于SNParray、靶向测序等技术实现的,国内服务厂商基本全部采用NGS。
用户7625144
2021/03/17
2K0
真正的缓存之王,Google Guava 只是弟弟
前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将要谈到一个新的本地缓存框架:Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache,借着他的思想优化了算法发展而来。
Leetcode名企之路
2021/12/09
1.2K0
真正的缓存之王,Google Guava 只是弟弟
Web真相: CSS不是真正的编程
每隔几个月就会出现一篇文章表明:CSS并不是真正的编程语言。以编程语言的标准来说,CSS过于困难。使用这门语言会很有创造性:
疯狂的技术宅
2019/03/27
7990
微服务不是全部,只是特定领域的子集
大家都在学SpringCloud,貌似学会了SC就牛逼哄哄,感觉不得了的样子。但微服务,在整个企业级应用中,只占了一小部分。微服务引入的问题比解决的问题还要多,你会遇到各种各样的bottleneck。
xjjdog
2019/09/24
5810
微服务不是全部,只是特定领域的子集
何时使用MongoDB而不是MySql
MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统。MySQL 是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB 以更灵活的格式将数据存储为 JSON 文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。
wayn
2023/08/09
1.1K0
何时使用MongoDB而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/06/26
4440
何时使用Kafka而不是RabbitMQ
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景
wayn
2023/08/28
3930
何时使用Elasticsearch而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/08/28
3490
何时使用Kafka而不是RabbitMQ
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景。本文将从以下几个方面对它们进行比较和分析:
wayn
2023/08/09
8140
何时使用Elasticsearch而不是MySql
重要的是图表思维,而不是工具
很久没有作图了,主要是一时找不到应该练手的案例。 然后昨天逛网易数独栏目的数据新闻,看到一幅还不错的案例,对于我来说值得一试,然后就手痒给照葫芦画瓢弄出来了。(主要是其中涉及到的细节处理很麻烦) 当然过程是花了些时间的,主要是需要慢慢打磨其中的细节,需要利用很多技术来处理图形版面的交接位置。 令我感触最深的是,想要用ggplot2随心所欲的画图,ggplot2掌握的再熟练,也只是勉强过的了技术关,而图表背后的思维和结构更考验人,更具有挑战性。 好在我学习R语言之前,就已经利用Excel临摹了大量的高难度信息
数据小磨坊
2018/04/11
9680
重要的是图表思维,而不是工具
百度开源自动驾驶,不是“原子弹”,而只是一颗手榴弹
不过这一切还要等到7月真正公开之后,方能知晓。 4月19日,就在两年一度的上海车展上,百度宣布了一个被称为“原子弹”的消息——开放自动驾驶平台。这个取名“阿波罗(Apollo)”的新计划中,百度方面表
镁客网
2018/05/29
5530
D3.js库-5-做一个简单的图形
SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定的开放标准。 SVG 使用 XML 格式来定义图形。SVG的几个特点
皮大大
2021/03/01
7K0
D3.js库-5-做一个简单的图形
2PC时代即将结束,2PC只是提供原子性提交而不是事务本身
如果有分布式事务协议,那么每个软件工程师都知道它:“两阶段提交”,也称为2PC。尽管使用了几十年,但是由于缺乏云环境的支持,它却一直在稳步下降。 过去在相当长的一段时间里,它是构建企业分布式系统的实际标准。也就是说,随着云成为默认的部署模型,设计人员需要学习如何在没有云的情况下构建可靠的系统。 回答如何替换2PC的问题首先需要了解协议的含义。尽管它曾经很受欢迎,但围绕2PC仍存在许多误解。这篇文章旨在澄清其中至少一些。 2PC不提供“事务” 2PC是原子提交协议,这意味着如果所有参与者都投票“是”,则所有参与者最终都将提交,否则将使系统保持不变。当用户触发了提交操作完成后,要么应用了所有本地修改,要么都没有应用。提交可能要花很长时间才能完成,在某些失败情况下,它将永远挂起。 让我们看一个例子,看看“不提供事务”的含义。在我们的场景中,我们有两个参与者:数据库和消息队列。该图显示了两个参与者都投票“是”并且协调者正在提交。
物流IT圈
2019/12/23
7240
2PC时代即将结束,2PC只是提供原子性提交而不是事务本身
我们真正该关注的应该是产品开发的效率与质量, 而不是工程实践或敏捷的价值
本文主要探讨了在软件开发过程中,如何提高效率和质量,而不是过分关注工程实践的价值。作者认为,通过设计有效的工程实践,团队可以更好地利用产品级敏捷和微服务产品级敏捷,从而实现持续的产品改进和团队成长。作者强调了团队应该关注产品开发的本质,而不是过分追求工程实践的价值。同时,作者也呼吁技术社区能够理解和支持团队在开发过程中所面临的挑战,以推动整个行业的进步和发展。
Ken Fang 方俊贤
2018/01/05
6580
我们真正该关注的应该是产品开发的效率与质量, 而不是工程实践或敏捷的价值
需要学习的是编程,而不是编程语言
我们不仅是程序员,而且是个(与时俱进的)学习者。鲜见的是有多少人认为他们是在学习编程的呢。原翻译传送门is here
Jimmy_is_jimmy
2023/05/24
5220
做产品经理而不是功能经理
产品经理是个很奇怪的岗位,好像大多数人都能做,因为每个人对某个产品都有自己的看法,都能提出一些意见和想法,甚至能设计实现原理;也好像大多数人都做不好产品经理,因为互联网上成千上万个产品,大部分是垃圾,
用户1756920
2018/06/20
1.2K0
Linux | 不懂Linux的码神,不是真正的菜鸟
虚拟机安装CentOS7 软件环境 虚拟机:VMware WorkstationLinux:CentOS-7-x86_64-DVD-1708.iso镜像文件虚拟机所在电脑系统:win7 安
码神联盟
2018/04/03
1.7K0
Linux | 不懂Linux的码神,不是真正的菜鸟
springcloud 返回的数据为XML 而不是JSON
本人的原因是因为引入了jackson-dataformat-xml依赖导致的,下面查看自己项目是否包含此依赖,如果包含的话,可以去掉。 有的人添加了下面注解后可以解决,不过我这里没有解决。还是依靠上图
qubianzhong
2019/04/01
2.4K0
springcloud 返回的数据为XML 而不是JSON
[答疑]系统首先维护的是本质而不是现象
可以看这个。轮子的大小只依赖于轮子的属性,轮子的前后还要依赖车的结构约束。想想哪个更本质。
用户6288414
2022/10/31
3490
[答疑]系统首先维护的是本质而不是现象
老王,怎么完整SQL的显示日志,而不是???...
在常规项目的开发中可能最容易出问题的地方就在于对数据库的处理了,在大部分的环境下,我们对数据库的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。
用户5224393
2019/10/16
1.4K0

相似问题

pygame声音只是弹出-不是真正的歌曲/声音

26

为CGMutablePath绘制阴影,而不是封闭的,只是一条线

10

如何从图中删除一条图形线而不是全部

13

而真正的循环不是无限的?

12

ggplot2奇怪地画了一条线

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档