簡體   English   中英

在節點中生成后捕獲子進程中的輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM