javascript - node.js 如何使用 child_process.exec 显示标准输入

标签 javascript node.js bash stdin

我有一个使用 child_process.exec 调用 npm adduser 的 node.js 脚本。通常,如果我在控制台中键入 npm adduser,我会得到:

用户名:[stdin 提示符]

密码:[标准输入提示符]

等等

如果我使用 node.js 来执行这段代码,那么什么也不会打印出来,它只会卡在一个空的提示符处,这种情况会一直持续下去,直到我按 ctrl-C 退出它。

如何获得通常的行为?我基本上只想执行 bash 并让它做它的事情......

最佳答案

因此,不要使用 exec 来运行程序而不进行任何复杂的 stdio 交互,而是使用 child_process.spawn 来访问 npm 进程的 stdio 并且你可以在 child 的 stdin 文件上调用 child.stdin.write(username + "\n")(和密码类似)。这可能足以让事情继续进行,但有时当程序需要用户交互输入时,以编程方式模拟可能会很棘手(因此存在像 expect 这样的东西)。

我认为 npm(通过“read”npm 模块)正在从 stdin 读取而不回显,在这种情况下这应该有效。但是,如果它直接从 tty 设备读取,则写入 stdin 将不起作用。

关于javascript - node.js 如何使用 child_process.exec 显示标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638008/

相关文章:

javascript - Ajax 自动完成浏览器卡住/崩溃

javascript - 平滑页面加载的JS函数-订单问题

javascript - 变量在 $scope 中可见,但在 Angular 中实际访问时未定义

node.js - npm安装错误,是node-gyp mojave问题吗?

javascript - 如何以跨浏览器的方式设置页面中图像的最大宽度?

javascript - Node.js - 使用 NVM 配置 $NODE_PATH

javascript - 使用 node.js 将 excel 中的所有工作表转换为 Json

linux - 我们必须在哪里放置 linux 命令?

python - 如何从参数中提取数据?

arrays - Bash:将 ls 保存在一个数组中 -> 只接收小写字母