gpt4 book ai didi

javascript - nodejs exec 命令失败,没有有用的错误消息

转载 作者:IT老高 更新时间:2023-10-28 23:16:50 25 4
gpt4 key购买 nike

这是要执行的代码



cp.exec("cc -Wall /tmp/test.c -o /tmp/test", function(e, stdout, stderr) {
if (e) {
var errorstr = "Compilation failed with the following error<br/>"+ e.message.toString()
client.send(errorstr)
console.log(e, stdout, stderr)
ee.prototype.removeAllListeners()
} else if (stderr.length > 0) {
client.send("Compilion finished with warnings\n"+ stderr + '\n')
client.send('compiled')
ee.prototype.emit('compiled')
} else {
client.send("Compilation successful")
ee.prototype.emit('compiled')
}
})

'client' 是 socket.io 的回调参数的参数。 'ee' 是 EventEmitter 的一个实例

解决问题。在运行代码时,回调说命令不成功。 console.log(e, stdout, stderr) 是

{ [Error: Command failed: ] killed: false, code: false, signal: undefined } '' ''

/tmp/test.c 是有效的 C 代码,在检查目录/tmp 时,我发现 test.c 是正确的,并且正在生成二进制“测试” 并在其中运行一个shell,被正确执行。所以我不明白为什么它会标记执行不成功。错误对象的信息也无济于事。希望得到一些帮助/解释

最佳答案

我有点担心控制台的输出。

{ [Error: Command failed: ] killed: false, code: false, signal: undefined }

看起来不像一个正确的 JSON/JavaScript 对象,尤其是 [Error: Command failed: ] 部分;至少少了一个逗号。

建议:

  1. 从命令行运行命令并检查退出代码(使用 echo $?)。如果退出代码是 != 0,那么这意味着命令“失败”(无论这意味着什么)。

  2. 命令失败时,nodejs says it will put the exit code进入 e.code (我在你的输出中遗漏了......)。找出这个值发生了什么。

  3. 尝试 if(e !== null) 而不是 if(e)不应该有所作为。

  4. 不要直接调用编译器,而是调用一个将 stderr/stdout 重定向到文件的 shell 脚本(或使用 cc ... |& tee/tmp/cc.log) 以确保复杂设置的任何部分都不会吞下重要信息。

关于javascript - nodejs exec 命令失败,没有有用的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319724/

25 4 0