"Error: Command failed: ..." when I execute commands with exec / execSync

"Error: Command failed: ..." when I execute commands with exec / execSync

const {execSync , exec} = require('child_process')
const res = execSync("help")
console.log(res.toString())

对于我尝试执行的每个命令(在本例中为 'help'),它都会抛出错误“错误:命令失败 .... 未找到”。我有什么不明白的?

深入了解 NodeJs 子进程模块

我决定在 here 查看 NodeJS 源代码以了解问题。 execSync 方法使用 spawnSync 到 运行 命令,最后调用 checkExecSyncError。后面可以看到,如果状态码不为0,就会抛出“Command failed ...”的错误。

然后我尝试 运行 const res = spawnSync("help");res.status 给了我 1。所以,命令 help 实际上产生了一个“不可见”的错误,尽管我们可以看到终端上的预期输出。

注意:退出状态 1 是一般错误的全部,AFAIK。退出状态 0 表示成功。 Further reading

在终端中确认

我去我的终端确认这一点,我 运行 help 然后 echo %ERRORLEVEL%. (感谢 Tim Gilbert),我收到了 1。所以这完全有意义我.

即使命令抛出错误,我们仍然可以得到这种情况下的输出。你可以参考我下面的代码:

const { execSync } = require('child_process')
console.log(process.env.ComSpec);// verify what terminal is used

try {

    // success command
    const resNpmVersion = execSync("npm -v");
    console.log("success", resNpmVersion.toString());

    // failed command, the result is printed in the catch block
    const resHelp = execSync("HELP");
} catch (error) {
    console.log(error.message);
    console.log("error", error.stdout.toString());
}

经验教训:检查命令的退出状态:)

(我在 Windows 10 上做了测试)