nodejs 調用系統命令/shell文件/可執行文件


nodejs的child_process模塊,官方文檔

異步加載

以下幾種方式都是異步加載

  • child_process.exec(command[, options][, callback]) 啟動子進程來執行shell命令,可以通過回調參數來獲取腳本shell執行結果
  • child_process.execfile(file[, args][, options][, callback])與exec類型不同的是,它執行的不是shell命令而是一個可執行文件
  • child_process.spawn(command[, args][, options])僅僅執行一個shell命令,不需要獲取執行結果
  • child_process.fork(modulePath[, args][, options])可以用node執行的.js文件,也不需要獲取執行結果。fork出來的子進程一定是node進程

沒驗證過 參考
exec()與execfile()在創建的時候可以指定timeout屬性設置超時時間,一旦超時會被殺死
如果使用execfile()執行可執行文件,那么頭部一定是#!/usr/bin/env node


調用shell文件要修改讀寫權限

// ******************系統命令******************
var spawn = require('child_process').spawn;
free = spawn('free', ['-m']); 

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

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

// 注冊子進程關閉事件 
free.on('exit', function (code, signal) { 
console.log('child process eixt ,exit:' + code); 
});

// ******************系統命令******************
var exec = require('child_process').exec; 
var cmdStr = "ls";
exec(cmdStr, function(err,stdout,stderr){
    if(err) {
        console.log('error:'+stderr);
    } else {
        console.log('args stdout:'+stdout);
    }
});

//*************  調用shell文件 ************
// chmod 777
// shell.sh:
// #!/bin/sh
// echo "$(pwd)"

var execfile = require('child_process').exec;
execfile("./shell.sh",function(err, stdout,stderr){
    if(err) {
        console.log('error:'+stderr);
    } else {
        console.log('args stdout:'+stdout);
    }
});


//*************  調用可執行文件 ************
var cp = require("child_process");
cp.execFile("colmap",["gui"],function(err,stdout,stderr){
    if(err){
        // console.error(err);
        console.log('error:'+err);
    }
    console.log("stdout:",stdout)
    console.log("stderr:",stderr);
});

同步加載

  • execFileSync:調用方式和異步加載相同,但是返回值不同,返回的是buffer/string類型
console.log(
        execfile.execFileSync("./scripts/shell.sh",["test"],{encoding: 'utf-8'},function(err,stdout,stderr){
        if(err){
            // console.error(err);
            console.log('error:'+err);
        }
        console.log("stdout:",stdout);
        console.log("stderr:",stderr);
        })
    );


免責聲明!

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



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