[英]Capture input in the child process after spawn in node
我正在開發一個小型 cli 工具,該工具可以根據目錄中設置的項目自動部署 Google Home 操作。
基本上我的腳本會檢查目錄,然后詢問要部署哪個項目。 應該運行的實際命令來自 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 命令的完整包裝器,帶有輸入/輸出/錯誤重定向:
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" } );
這將執行我們通常在終端中執行的命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.