我正在尝试编写一个node.js脚本,该脚本仅在通过管道传输的stdin中输入(而不是从键盘等待输入)。 因此,我需要确定管道stdin是否为null

首先,我尝试使用readable事件:

var s = process.stdin;
s.on('readable', function () {
    console.log('Event "readable" is fired!');
    var chunk = s.read();
    console.log(chunk);
    if (chunk===null) s.pause();
});

结果与预期的一样:

$ node test.js
Event "readable" is fired!
null
$ 

然后,我尝试使用data事件来做同样的事情,因为我喜欢使用流动模式:

var s = process.stdin;
s.on('data', function (chunk) {
    console.log('Event "data" is fired!');
    console.log(chunk);
    if (chunk===null) s.pause();
});

但是这一次它在空检查之前等待键盘输入,然后卡在那儿。 我想知道为什么会这样? 这是否意味着要执行null检查,我需要先将其pause ,然后等待readable的代码被触发,执行null检查,然后resume流,以防止node.js等待键盘输入? 在我看来这很尴尬。 有没有办法避免使用readable事件?

===============>>#1 票数:1 已采纳

使用节点核心库中的tty.isatty() 如果stdin是管道,则该函数将返回false

  ask by xzhu translate from so

未解决问题?本站智能推荐:

3回复

等待用户在Node.js中输入输入

我理解Node.js中异步事件的基本原理,我正在学习如何以这种方式编写代码。 但是,我遇到以下情况: 我想编写偶尔暂停用户输入的代码。 该程序不是作为服务器(虽然目前它是用于命令行)。 我意识到这是Node的非典型用法。 我的目标是最终将程序迁移回客户端Javascript应用
3回复

等待用户在node.js中输入

我只想提一下,我尝试了博客中的多种技术来获取用户输入,但是示例始终在仅要求用户输入的程序的上下文中……它们始终有效,但是节点从来没有任何问题。 js继续到下一行代码,因为没有。 我必须获取用户输入,然后验证输入是否有效,因此创建了以下构造: 它调用的函数是这样的: 除了在用
6回复

如何防止Node.js在等待回调时退出?

我有这样的代码: 我的问题是Node运行时会立即终止。 它打印'Icanhasclient',但没有调用回调内的console.log。 (本例中的mysql是node-mysql 。 有没有什么可以让node.js在退出之前等待回调完成?
1回复

node.js等待回调

我正在尝试掌握node.js的流控制。 在下面的代码中,我定义了一个函数,其中包含一个递归函数。 我想调用此“主要”功能,等待其完全完成并用console.log记录结果。 问题是node.js的非阻塞方式。 如何设置回调以确保输出正确? 在下面的代码中,输出将为空,我该如何更改?
3回复

node.js等待响应

关于节点和nob-blocking IO的知识非常有限,请原谅我,如果我的问题太天真了。 为了在响应主体中返回所需信息,我需要 拨打第三方API 等待回应 添加一些修改并返回JSON响应和我从API获得的信息。 我的问题是......我怎么能等待回复?
1回复

等待来自readline模块(Node.Js)的用户输入

我正在创建一个模块,以获取经验并缩短一些代码。 我有一段代码以简化的方式使用readline,例如var x = arkin.question("How old are you? "); 。 Readline不会等待答案。 它产生此: 你几岁? 未定义 码:
1回复

防止在Node.js控制台中进行输入/输出混合?

我只是设法使Node.js minecraft机器人API(称为mineflayer )能够正常工作。 当我上次制作Minecraft bot时(全部由C ++ 编写 ),我遇到一个问题,即在控制台中进行编写时,服务器消息会与我正在编写的内容混合在一起 。 那时我得到的答案似乎太复杂/不清楚
3回复

等待事件时异步等待-node.js

我正在尝试在事件驱动的项目中使用异步等待,但出现以下错误: 到目前为止,我有以下代码(简化): 我的问题不是真正的下面的库,而是了解异步等待的基本原理并在事件驱动的脚本中使用它。 我不太了解这是范围问题还是其他问题。 我正在为亚马逊破折号按钮使用以下事件驱动的库: htt
1回复

用户输入node.js

我有以下Node.js代码行为奇怪: 我想模仿Python的raw_input ,即从用户那里读取一行。 显示提示后,应阻止程序,直到用户按Enter键。 如果“有问题的行”在注释中,它可以工作,程序正在等待输入。 但是,如果该行不在注释中,则程序不等待输入, n变为undef
1回复

Node.js多行输入

我想提示用户输入,让用户输入多行文本,点击每行之间输入,然后按CTRL + D或某些这样的东西终止输入。 使用“按键”,我可以捕获EOF,但我必须手动处理所有回声,退格处理,终端转义序列等。 如果我可以使用“readline”,但以某种方式用“keypress”拦截CTRL + D(EO