Nodejs执行命令失败,没有有用的错误信息
nodejs exec command failing with no useful error message
这是执行
的代码
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的回调参数。'ee'是EventEmitter的一个实例
说到这个问题。在运行代码时,回调说命令不成功。Console.log (e, stdout, stderr)是
{[Error: Command failed:] killed: false, code: false, signal: undefined} '' ''
/tmp/test. C是一个有效的C代码,在检查目录/tmp时,我发现test. C是正确的,二进制'test' 是正在生成,并在shell中运行,正确执行。所以我不明白为什么它会标记执行失败。错误对象的信息也没有帮助。
我有点担心控制台的输出。
{ [Error: Command failed: ] killed: false, code: false, signal: undefined }
看起来不像一个合适的JSON/JavaScript对象,尤其是[Error: Command failed: ]
部分;至少少了一个逗号。
建议:
在命令行中执行命令,检查退出码(使用
echo $?
)。如果退出代码是!= 0,那么这意味着命令"失败"(无论这可能意味着什么)。当命令失败时,nodejs说它会把退出代码放入
e.code
(我在你的输出中丢失了…)。尝试
if(e !== null)
代替if(e)
。不应该有所不同。不要直接调用编译器,而是调用shell脚本将stderr/stdout重定向到一个文件(或使用
cc ... |& tee /tmp/cc.log
保存副本),以确保复杂设置的任何部分都不会吞噬重要信息。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- /undefined在我的404错误日志中多次出现
- Javascript未捕获语法错误意外的标识符错误
- javascript:如何在antlr生成的Lexer中进行错误处理
- jQuery-Can't让ajax请求在IE中工作,没有给出有用的错误消息
- 错误url对于动态注入的javascript函数是没有用的.需要用户提供参考
- Nodejs执行命令失败,没有有用的错误信息