簡體   English   中英

節點:如何從child_process.spawn()流式傳輸STDERR內容?

[英]Node: How to stream STDERR content from child_process.spawn()?

我正在使用Node的child_process.spawn()運行外殼命令,並帶有以下代碼:

const process = require('child_process').spawn('whoami');

// this works...
process.stdout.on('data', function(buf) {
    console.log('HERE IS SOME STDOUT CONTENT "%s"', String(buf));
});

// this never works...
process.stderr.on('data', function(buf) {
    console.log('HERE IS SOME STDERR CONTENT "%s"', String(buf));
});

// this works, but doesn't let me stream STDERR content...
process.on('error', (err) => {
    console.log('there was an error: ' + err);
});

運行上面的有效命令whoami讓我讀取傳遞給process.stdout.on的函數中的STDOUT數據。

如果我將命令更改為無效的內容(產生一些STDERR內容),例如...

const process = require('child_process').spawn('whoami BADARGUMENTTOBREAKTHINGS');

... whoami命令將錯誤消息輸出到STDERR(在普通shell中),但是在Node中, process.stderr.on內部的函數從未執行。 我再也看不到“ HERE IS SOME STDERR CONTENT消息。

我還嘗試了其他一些無效的Shell命令,例如cd folderthatdoesntexistls filenamethatdoesntexist ,它們都應該產生STDERR內容。

輸入完我的問題后,我發現這很簡單,因為您無法在.spawn()的第一個參數中留空格...您必須將命令的其余部分作為第二個參數傳入與數組,即

const process = require('child_process').spawn('whoami', ['BADARGUMENTTOBREAKTHINGS']);

這是意外的,因為.exec()和.spawnSync()都在第一個參數中使用空格。

希望這可以幫助將來有同樣問題的其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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