on 2016-05-25

Node.js - 直接執行指令

因為最近要用 nodejs 做一些事, 所以就趕鴨子上架的先把功能做出來再說

然後就立馬遇到問題了…

在 PHP 中要直接執行 command line 是使用 exec

因為之前都用 PHP 寫 Shell Scripts 所以找了一下用 nodejs 要如何寫

先是找到了以下的 code

function run_cmd(cmd, args, callBack ) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";

    child.stdout.on('data', function (buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function() { callBack (resp); });
}

// example
run_cmd( "ls", ["-l"], function(text) {
    console.log (text) ;
});

但是發現如果是要用像是 mkdir 或者要 run shell 就會出 ENOENT 的 error

結果找到了其他的範例程式碼改良後

function exec_cmd(cmd, callBack ) {
    var childProcess = require('child_process');

    var ls = childProcess.exec(cmd, function (error, stdout, stderr) {
        if (error) {
            console.log(error.stack);
            console.log('Error code: '+error.code);
        }
        console.log('Child Process STDOUT: '+ stdout);
        callBack(stdout);
    });
}

這樣就行了

這似乎是因為 spawnexec 的機制的問題

但查了一下, 還是不了解 spawnexec 在這例子中的差別與錯誤的發生原因, 只能等有空時再來研究了…

Refer - Node.js进程通信模块child_process Refer - 说说Node.js child_process模块中的spawn和exec方法