【问题标题】:NodeJS: How to synchronously exewcute shell command and detects errorsNodeJS:如何同步执行 shell 命令并检测错误
【发布时间】:2017-12-26 05:44:08
【问题描述】:

我想同步执行一个shell命令并检查shell命令的结果是否有任何错误。

因此我使用shellJS 及其执行方法。

不幸的是,成功的处理程序永远不会到达。我的 shell.exec-statement 之后的任何语句都会立即执行。

这是我的代码:

function * exec(cmd, verbose) {
    if(verbose) console.log("\nCMD " + cmd);

    var ret = 0;

    shell.exec(cmd, function(code, stdout, stderr) {
        console.log("AAAAA")
        ret = code;
        if(code !== 0) console.log(stderr)
    });

    console.log("BBBBB")

    if(ret !== 0 && ret !== undefined) {
        console.log("ERROR: there is an error occured: ", ret);
        process.exit();
    }
    return ret;
}

我调用这个方法:

yield exec('ls -l', true);
yield exec('ls -l ..', true);

console.log("AAA") 出现在应用程序的末尾,位于所有其他 console.logs 之后.... console.log("BBB") 在 shell.exec-command 触发任何输出之前立即出现。

shell.js 的 README 说明:

除非另有说明,否则同步执行给定的命令。 在同步模式下,这将返回一个 ShellString(兼容 ShellJS v0.6.x,它返回一个 { code:... 形式的对象, 标准输出:...,标准错误:...})。否则,这将返回子进程 对象,回调获取参数(代码、标准输出、标准错误)。

有什么想法吗?我哪里错了,

【问题讨论】:

    标签: node.js shell


    【解决方案1】:

    来自文档: https://github.com/shelljs/shelljs

    “如果提供了回调,则 [async] 将设置为 true”。

    不要传递回调。可以这样称呼:

    var child = shell.exec(command);
    child.stdout.on('data', data => {
      /* ... do something with data ... */
    });
    

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多