Javascript 在节点中生成后在子进程中捕获输入

Javascript 在节点中生成后在子进程中捕获输入,javascript,node.js,spawn,google-home,Javascript,Node.js,Spawn,Google Home,我正在开发一个小型cli工具,它可以根据目录中设置的项目自动部署Google Home操作 基本上,我的脚本检查目录,然后询问要部署哪个项目。应该运行的实际命令来自Google的cli 要使用参数运行它,我在节点脚本中设置了一个派生进程: const { spawn } = require('child_process') const child = spawn('./gactions', [ 'update', '--action-package', '<PATH

我正在开发一个小型cli工具,它可以根据目录中设置的项目自动部署Google Home操作

基本上,我的脚本检查目录,然后询问要部署哪个项目。应该运行的实际命令来自Google的cli

要使用参数运行它,我在节点脚本中设置了一个派生进程:

const { spawn } = require('child_process')
const child = spawn('./gactions', [
    'update',
    '--action-package',
    '<PATH-TO-PACKAGE>',
    '--project',
    '<PROJECT-NAME>'
])

child.stdout.on('data', data => {
    console.log(data)
}
但是,第一次部署项目时,gactions cli将提示输入授权代码。运行上面的代码,我实际上可以看到提示,但是当实际输入代码时,脚本不会继续


我想在子进程中一定有某种方法来捕获输入?或者这根本不可能吗

只需将所有标准输入从父进程传输到子进程,并将所有输出从子进程传输到父进程

下面的代码是任何shell命令的完整包装,带有输入/输出/错误重定向:

const { spawn } = require('child_process');
var child = spawn(command, args);

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
process.stdin.pipe(child.stdin);

child.on('exit', () => process.exit())

请注意,如果通过管道传输标准数据,则不再需要处理数据事件。

只需将所有标准输入从父进程传输到子进程,并将所有输出从子进程传输到父进程

require( "child_process" ).spawnSync( "sh", [ "-c", "npm adduser" ], { stdio: "inherit", stdin: "inherit" } );
下面的代码是任何shell命令的完整包装,带有输入/输出/错误重定向:

const { spawn } = require('child_process');
var child = spawn(command, args);

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
process.stdin.pipe(child.stdin);

child.on('exit', () => process.exit())
请注意,如果使用管道stdout,则不再需要处理数据事件

require( "child_process" ).spawnSync( "sh", [ "-c", "npm adduser" ], { stdio: "inherit", stdin: "inherit" } );
这将像我们通常在终端中一样执行给定的命令


这将像我们通常在终端中一样执行给定的命令。

子进程的stdin、stdout和stderr是流,因此您可以随意操作它们。节点文档为您提供了一个非常简单的起点。Ok。但是,当提示输入时,如何捕获该输入呢?子进程的stdin、stdout和stderr都是流,因此您可以随意操作它们。节点文档为您提供了一个非常简单的起点。Ok。但是,当提示输入时,我如何捕获该输入?这很有效。我可能需要阅读更多关于节点中管道数据的信息。有没有关于这个主题的好文档的建议?您应该阅读有关使用streams的内容,这是一个更广泛的主题。官方的node docs about是一个很好的起点,但是你可以随时在谷歌上搜索moreCool。谢谢米海!Spawn有第三个参数-选项。传递stdio,然后配置stdin、stdout、stderr管道,即spawncommand、args、{stdio:[inherit、inherit、inherit]}有关stdio的更多信息:有效。我可能需要阅读更多关于节点中管道数据的信息。有没有关于这个主题的好文档的建议?您应该阅读有关使用streams的内容,这是一个更广泛的主题。官方的node docs about是一个很好的起点,但是你可以随时在谷歌上搜索moreCool。谢谢米海!Spawn有第三个参数-选项。传递stdio,然后配置stdin、stdout、stderr管道,即spawncommand、args、{stdio:[inherit,inherit,inherit]}关于stdio的更多信息:建议不错,但第一个答案对我来说很有用。谢谢你的建议,但第一个答案对我很有吸引力。谢谢