我正在寫一個約曼發電機和使用child_process.spawn()(通過自耕農的spawnCommand() - 見https://github.com/yeoman/generator/blob/master/lib/actions/spawn_command.js)節點的子進程的stdout產卵返回爲空
我的代碼如下所示:
var list = this.spawnCommand('npm', ['list', 'sails'], {stdio: 'pipe'});
list.stdout.on('data', /* callback here that wants to consume the command's output */);
我可以看到list.stdio
存在,它有[0,1,2]
作爲鍵。它們中的每一個都爲空(或未定義)。即,日誌記錄_.keys(list).join()
輸出,,
。 list.stdout.on()
給了我一個例外,說明stdout
爲空。
我需要完成的是檢查是否安裝了特定的軟件包並查看版本號是什麼。但是我後來還需要做其他事情來解析CLI命令的輸出(例如,git log output),所以我需要一個通用的解決方案。 .spawn()
看起來像我想要的,但我看到的例子似乎表明,標準輸出應該是有一個.on()
方法。例如,這裏給出的那個:http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options它顯示正在運行ls -lh /usr
。
我是否缺少一些簡單的東西?我想知道如果我運行的命令沒有返回任何輸出,如果這意味着標準輸出將爲空。如果是這種情況,那麼我只需要確定可能沒有輸出的命令,並在嘗試使用它之前檢查以確保stdout不爲null。
編輯實際上,故宮list命令的輸出顯示了在命令行,但我用來診斷問題(我會在.spawnCommand()
調用後和.on()
調用之前把日誌語句後。但我需要在我的代碼中訪問它 - 讓它在命令行上顯示出來(除了它讓我知道該進程成功運行CLI命令)。
有沒有找出原因是什麼?我現在也在尋找答案。 – Rondo
不太遠:(對不起 – jinglesthula