Nvidia Smi JSON输出

时间:2017-03-13 17:00:01

标签: json node.js xml nvidia

我想提供有关机器可用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;
        };

离开这里

  1. 获取这些信息的另一种方式是json?
  2. 通过一些强大的XML / JSON解析器模块提供更有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

尝试使用https://github.com/Cheedoong/xml2json 它速度更快,可以用作jq之类的二进制工具。 然后您将像这样运行:

mae

结果将是:

nvidia-smi -x -q | xml2json | jq
相关问题