利用NodeJS的子進程(child_process)調用系統命令

本文轉載至:http://blog.csdn.net/ei__nino/article/details/37513507

child_process即子進程可以創建一個系統子進程並執行shell命令,在與系統層面的交互上挺有用處。 NodeJS子進程簡介 NodeJS子進程提供了與系統交互的重要接口,其主要API有: 標準輸入、標準輸出及標準錯誤輸出的接口。

NodeJS子進程簡介

NodeJS 子進程提供了與系統交互的重要接口,其主要 API 有:

  • 標準輸入、標準輸出及標準錯誤輸出的接口
    • child.stdin 獲取標準輸入
    • child.stdout 獲取標準輸出
    • child.stderr 獲取標準錯誤輸出
  • 獲取子進程的PID:child.pid
  • 提供生成子進程的重要方法:child_process.spawn(cmd, args=[], [options])
  • 提供直接執行系統命令的重要方法:child_process.exec(cmd, [options], callback)
  • 提供殺死進程的方法:child.kill(signal='SIGTERM')

 實例一:利用子進程獲取系統內存使用情況

將以下代碼保存爲 free.js

var spawn = require('child_process').spawn,
    free  = spawn('free', ['-m']);

// 捕獲標準輸出並將其打印到控制檯
free.stdout.on('data', function (data) {
    console.log('標準輸出:\n' + data);
});

// 捕獲標準錯誤輸出並將其打印到控制檯
free.stderr.on('data', function (data) {
    console.log('標準錯誤輸出:\n' + data);
});

// 註冊子進程關閉事件
free.on('exit', function (code, signal) {
    console.log('子進程已退出,代碼:' + code);
});

執行代碼後的結果:

$ node free.js 
標準輸出:
             total       used       free     shared    buffers     cached
Mem:          3949       1974       1974          0        135        959
-/+ buffers/cache:        879       3070
Swap:         3905          0       3905

子進程已退出,代碼:0

以上輸出相當與在命令行執行:free -m 命令。

通過這個簡單的例子我們已經對子進程的使用有所瞭解,下面再來一個示例,用於演示exec 的使用方法。

 實例二:利用子進程統計系統登錄次數

將下面代碼保存爲 last.js

var exec = require('child_process').exec,
    last = exec('last | wc -l');

last.stdout.on('data', function (data) {
    console.log('標準輸出:' + data);
});

last.on('exit', function (code) {
    console.log('子進程已關閉,代碼:' + code);
});

執行代碼:

$ node last.js 
標準輸出:203

子進程已關閉,代碼:0

其與直接在命令行輸入:last | wc -l 的結果是一樣的。


來源:http://www.csser.com/board/4f3f516e38a5ebc97800050c


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章