我想提供有关机器可用GPU和实时监控状态的系统信息。 我正在使用
输出XML
GPU信息
$ nvidia-smi -x -q
此命令将打印输出当前GPU状态(如使用情况,温度等)以及格式化的XML(具有已定义的DTD)。 我的XML输出是here。
没有选项可以直接从nvidia-smi
输出到json,所以此时我看到的唯一选项是从Node.js将XML转换为JSON。
问题是我需要它作为JSON,所以我试图在我的Node
应用程序中转换为JSON。我已经使用了几个npm可用的模块,如xml2json,node-xml2js等,但是每个都有不同的错误(null,undefined等)。
在浏览器中使用简单的DOMParser(window.DOMParser)将起作用。
这个XML似乎是一个错误,因为当我有一个像here这样的GPU输出时,JSON被转换得很好,如gist所示。
我正在使用节点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
}
在这种情况下,我使用modified版本的xml2json浏览器客户端模块与xmldom
模块相结合,但它似乎不是一个稳定的解决方案,所以我的解析在这里完成,如:< / p>
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;
};
离开这里
答案 0 :(得分:1)
尝试使用https://github.com/Cheedoong/xml2json 它速度更快,可以用作jq之类的二进制工具。 然后您将像这样运行:
mae
结果将是:
nvidia-smi -x -q | xml2json | jq