json - Nvidia Smi JSON 输出

标签 json node.js xml nvidia

我想将有关机器可用 GPU 和状态的系统信息放入系统中以进行实时监控。 我使用 XML 输出 GPU 信息

$ nvidia-smi -x -q

此命令将打印输出当前 GPU 状态(如使用情况、温度等)以及格式化的 XML(具有定义的 DTD)。 我的 XML 输出是 here .

没有直接从 nvidia-smi 输出到 json 的选项,因此此时我看到的唯一选项是将 XML 从 Node.js 转换为 JSON。

问题是我需要它作为 JSON,所以我尝试在我的 Node 应用程序中转换为 JSON。我依次使用了几个 npm 可用模块,如 xml2json、node-xml2js 等,但每个模块都有不同的错误(null、未定义等)。 在浏览器中使用简单的 DOMParser (window.DOMParser) 即可。 这似乎是这个 XML 的一个错误,因为当我有一个像 here 这样的 GPU 输出时JSON 转换得很好,如 gist 所示.

我使用 Node 生成来调用 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 模块结合的版本,但这似乎不是一个稳定的解决方案,所以我的解析是在这里完成的,如下所示:

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 解析器模块获得更高效的解决方案?

最佳答案

尝试使用https://github.com/Cheedoong/xml2json 它速度更快,并且可以用作 jq 等二进制工具。 你会像这样运行:

nvidia-smi -x -q | xml2json | jq

结果将是这样的:

{
  "nvidia_smi_log": {
    "timestamp": "Thu Aug 29 13:45:26 2019",
    "driver_version": "387.34",
    "attached_gpus": "9",
    "gpu": [
      {
        "@id": "00000000:03:00.0",
        "product_name": "P106-090",
        "product_brand": "GeForce",
        "display_mode": "Disabled",
        "display_active": "Disabled",
        "persistence_mode": "Enabled",
        "accounting_mode": "Disabled",
        "accounting_mode_buffer_size": "1920",
        "driver_model": {
          "current_dm": "N/A",
          "pending_dm": "N/A"
        },
        "serial": "N/A",
        ...

关于json - Nvidia Smi JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42769303/

相关文章:

node.js - 添加云代码解析服务器示例项目时找不到模块

java - 在开发模式下运行 spring-GWT 应用程序时出现 XML 错误

java - 如何在 Webview 的 OnRecievedError 上增加新布局?

json - Postgresql 使用变量更新 json 数据

python - 使用常规编码器使对象 JSON 可序列化

javascript - JSON动态Javascript解析 "undefined"

ios - 尝试归档符合 NSCoder 的类的实例

node.js - 使用 Node 运行 .vbs 脚本

node.js - Discord.js 在多个服务器上播放音频

c# - 通过列表从 XML 中获取 InnerText