node.js 標准/錯誤輸出 和 process.exit


node.js中,各種模塊有一種標准的寫法:

this._process.exec(command, options, function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

這里說的標准,是指回調函數,一般有err作為第一個參數,然后是具體的數據。

 

寫服務器程序的時候,或多或少會用到child_process這個模塊,而這個模塊的用法正如上邊代碼所示。

例如調用一個shell命令刪除文件,可以這樣:

    child_process.exec('rm -rf xxxx', function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

返回的參數,其實err是一個對象,而stdout和stderr是字符串,stdout就是執行的子進程中使用標准輸出的信息,而stderr就是子進程中錯誤輸出流的內容。

 

那么問題來了,如果我們自己用node.js寫一個簡單腳本,讓其他node程序去調用,怎么模仿實現一樣的返回情況呢?

其他程序調用的時候,可能是這樣:

child_process.exec('node doSomething.js', function (err, stdout, stderr) {
            callback(err, stdout, stderr);
        })

如果我們在子進程中,使用console.log/error打印信息,結果,會發現,在父進程的回調函數中將什么都得不到。

奇了怪了,console.error不就是錯誤輸出嗎?好吧,這只能怪自己寫web寫多了,然后node.js並不是這樣的。

 

接下來就要介紹三個玩意,分別對應stdout、stderr和err。

process.stdout.write
process.stderr.write
process.exit(非0)

 

write函數接受的是一個字符串,那么為了方便使用,我們可以封裝一下:

console.error = function () {
    var msg = Array.prototype.join.call(arguments, ', ');
    process.stderr.write(msg);
};

 

最后,如果程序跑出錯,除了在stderr中輸出信息外,我們還可能需要立刻終止程序。

按照linux的規范,一般成功用0表示,而非0則表示失敗。那么process.exit也遵循這個規范。

  • process.exit(0)表示成功完成,回調函數中,err將為null;
  • process.exit(非0)表示執行失敗,回調函數中,err不為null,err.code就是我們傳給exit的數字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM