在节点中生成后捕获子进程中的输入
Capture input in the child process after spawn in node
我正在开发一个可以自动部署 Google 主页操作的小型 cli 工具,该操作基于目录中设置的项目。
基本上我的脚本会检查目录,然后询问要部署哪个项目。应该 运行 的实际命令来自 Google 的 cli gactions
为了 运行 它带有参数,我在我的节点脚本中设置了一个生成的进程:
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 命令的完整包装,带有 input/output/error 重定向:
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
,则您不再需要处理 data
事件。
require( "child_process" ).spawnSync( "sh", [ "-c", "npm adduser" ], { stdio: "inherit", stdin: "inherit" } );
这将执行我们通常在终端中执行的命令。
我正在开发一个可以自动部署 Google 主页操作的小型 cli 工具,该操作基于目录中设置的项目。
基本上我的脚本会检查目录,然后询问要部署哪个项目。应该 运行 的实际命令来自 Google 的 cli gactions
为了 运行 它带有参数,我在我的节点脚本中设置了一个生成的进程:
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 命令的完整包装,带有 input/output/error 重定向:
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
,则您不再需要处理 data
事件。
require( "child_process" ).spawnSync( "sh", [ "-c", "npm adduser" ], { stdio: "inherit", stdin: "inherit" } );
这将执行我们通常在终端中执行的命令。