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

node.js how to show stdin input with child_process.exec

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

用户名:[标准输入提示]

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

等等

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

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

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

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