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

Javascript node.js如何使用child_process.exec显示标准输入,javascript,node.js,bash,stdin,Javascript,Node.js,Bash,Stdin,我有一个node.js脚本,它使用child_process.exec调用npm adduser。通常,如果我在控制台中键入npm adduser,我会得到: 用户名:[标准输入提示] 密码:[标准输入提示] 等等 如果我使用node.js来执行这段代码,那么就不会输出任何内容,只会出现一个空提示,直到我按ctrl-C键退出为止 我怎样才能得到通常的行为?我基本上只想执行bash并让它做它自己的事情…因此,不要使用exec来运行程序而不进行任何复杂的stdio交互,而是使用child\u pro

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

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

密码:[标准输入提示]

等等

如果我使用node.js来执行这段代码,那么就不会输出任何内容,只会出现一个空提示,直到我按ctrl-C键退出为止


我怎样才能得到通常的行为?我基本上只想执行bash并让它做它自己的事情…

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


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

是否不能直接从节点调用
adduser
?如果没有,有很多方法可以将stdin发送到进程,我从来没有这样做过,但是是的,我可以直接从节点执行。具体来说,我是这样做的:
require(“child_进程”).spawnSync(“sh”),[“-c”,“npm adduser”],{stdio:“inherit”,stdin:“inherit”})