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

Eli*_*Eli 6 javascript bash stdin node.js

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

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

密码:[标准输入提示]

等等。

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

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

Pet*_*ons 7

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

我认为npm(通过“读取”npm 模块)正在从标准输入读取而不回显,在这种情况下这应该可以工作。但是,如果直接从 tty 设备读取,则无法写入 stdin。

  • 具体来说,我这样做了: `require( "child_process" ).spawnSync( "sh", [ "-c", "npm adduser" ], { stdio: "inherit", stdin: "inherit" } );` (6认同)