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

这是要执行的代码

cp.exec("cc -Wall /tmp/test.c -o /tmp/test", function(e, stdout, stderr) { if (e) { var errorstr = "Compilation failed with the following error 
"+ 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的callback参数的参数。 'ee'是EventEmitter的一个实例

来解决这个问题。 在运行代码时,callback表示该命令不成功。 console.log(e,stdout,stderr)是

  {[错误:命令失败:]杀死:假,代码:假,信号:未定义}'''' 

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

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

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

看起来不像一个正确的JSON / JavaScript对象,特别是[Error: Command failed: ]部分; 至less有一个逗号丢失。

build议:

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

  2. 当命令失败时, nodejs会说退出代码放到e.code (我在输出中缺less这个代码 )。 找出这个值发生了什么。

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

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