"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 上做了测试)
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 上做了测试)