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

时间:2015-02-20 20:54:39

标签: javascript node.js bash stdin

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

用户名:[标准提示]

密码:[标准提示]

如果我使用node.js来执行这段代码,那么没有任何内容被打印出来,它只会被卡在一个空的提示符下,这将永远持续下去,直到我ctrl-C出来。

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

1 个答案:

答案 0 :(得分:1)

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

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