我想在我的系统中添加有关可用GPU和实时监控状态的机器信息。
我正在使用
这个命令将打印出当前GPU状态的输出(例如使用情况、温度等),以格式化的XML(带有定义的DTD)形式。 我的XML输出在这里。
目前没有直接从nvidia-smi输出JSON的选项,因此我认为目前唯一的选择是从Node.js将XML转换为JSON。
问题在于我需要将其转换为JSON格式,因此我正在尝试在我的Node应用程序中进行转换。我已经依次使用了几个npm可用的模块,如xml2json、node-xml2js等,但是每个模块都有不同的错误(null、undefined等)。 在浏览器中使用简单的DOMParser(window.DOMParser)将起作用。 似乎这个XML存在错误,因为当我有一个GPU输出像here时,JSON会像在这个gist中展示的那样被正确转换。 我正在使用node spawn调用nvdia-smi命令,然后解析输出,如下所示:
在这种情况下,我使用了 修改后的 xml2json 浏览器客户端模块结合
XML
输出GPU信息。$ nvidia-smi -x -q
这个命令将打印出当前GPU状态的输出(例如使用情况、温度等),以格式化的XML(带有定义的DTD)形式。 我的XML输出在这里。
目前没有直接从nvidia-smi输出JSON的选项,因此我认为目前唯一的选择是从Node.js将XML转换为JSON。
问题在于我需要将其转换为JSON格式,因此我正在尝试在我的Node应用程序中进行转换。我已经依次使用了几个npm可用的模块,如xml2json、node-xml2js等,但是每个模块都有不同的错误(null、undefined等)。 在浏览器中使用简单的DOMParser(window.DOMParser)将起作用。 似乎这个XML存在错误,因为当我有一个GPU输出像here时,JSON会像在这个gist中展示的那样被正确转换。 我正在使用node spawn调用nvdia-smi命令,然后解析输出,如下所示:
(function() {
var XMLParser = require('./xml2json');
function gpuInfo() {
var _data='';
var curl = require('child_process').spawn('nvidia-smi', ['-x','-q']);
curl.stdout.on('data', function(data) {
_data+= new Buffer(data,'utf-8').toString();
});
curl.stdout.on('end', function(data) {
var x2js = new XMLParser();
var json = x2js.xml_str2json( _data );
console.log(JSON.stringify( json,null,2));
});
curl.on('exit', function(code) {
if (code != 0) {
console.log('Failed: ' + code);
}
});
}
module.exports = {
gpuInfo:gpuInfo
}
在这种情况下,我使用了 修改后的 xml2json 浏览器客户端模块结合
xmldom
模块,但似乎不是一个稳定的解决方案,因此我的解析在这里完成,如下所示:this.parseXmlString = function(xmlDocStr) {
if (xmlDocStr === undefined) {
return null;
}
var xmlDoc;
var DOMParser = require('xmldom').DOMParser;
var parsererrorNS = null;
try {
xmlDoc = new DOMParser().parseFromString( xmlDocStr, "text/xml" );
if( parsererrorNS!= null && xmlDoc.getElementsByTagNameNS(parsererrorNS, "parsererror").length > 0) {
xmlDoc = null;
}
}
catch(err) {
xmlDoc = null;
}
return xmlDoc;
};
离开这里了
- 还有其他方法可以以JSON格式获取这些信息吗?
- 通过一些强大的XML / JSON解析器模块来实现更高效的解决方案?