【发布时间】:2013-10-11 13:30:02
【问题描述】:
我正在处理一些作为 Ruby 哈希字符串返回的命令输出。 (来自一个叫做 mcollective 的东西)。
这是我收到的示例字符串:
{:changes=>{"total"=>0}, :events=>{"failure"=>0, "success"=>0, "total"=>0}, :version=> {"puppet"=>"2.7.21 (Puppet Enterprise 2.8.1)", "config"=>1381497648}, :time=> {"filebucket"=>0.000287, "cron"=>0.00212, "package"=>0.398982, "exec"=>0.001314, "config_retrieval"=>5.60761618614197, "anchor"=>0.001157, "service"=>0.774906, "total"=>9.85111718614197, "host"=>0.002662, "user"=>0.063606, "file"=>2.998467, "last_run"=>1381497660}, :resources=> {"skipped"=>6, "failed_to_restart"=>0, "out_of_sync"=>0, "failed"=>0, "total"=>112, "restarted"=>0, "scheduled"=>0, "changed"=>0}}
我有能力为此编写一个迷你解析器,但这将是一项繁琐的任务。有谁知道可以为我将其转换为 Python 字典的库或代码 sn-p?
如果您认为我应该只解析它,欢迎提供任何提示。
【问题讨论】:
-
一个快速的技巧是将 => 替换为 : 和 :[a-z]+ 替换为 "\1",然后调用 ast.literal_eval 或 json.loads。这是不正确的,因为它忽略了字符串文字,但现在可能已经足够了。
-
根据他们的文档docs.puppetlabs.com/mcollective/reference/basic/…,他们还可以导出 JSON:
-j标志。 -
不幸的是,我正在运行的版本中没有。但是,是的,那将是最好的
-
发送一个 Ruby 哈希的字符串表示真的很奇怪。 Ruby 开发人员应该知道比这样做更好,并且会使用 JSON 或 YAML。您能否向我们展示示例代码,描述您如何进行调用和接收结果数据字符串,以及您如何看待它?您可以使用 cURL 检索数据并完全在 Ruby 或 Python 之外查看数据吗?
-
它来自 mcollective 的输出,所以您已经看到了从 ruby 或 python 外部调用的字符串。您看到的字符串是该程序的输出,它在 ruby 或 python 之外运行。您可以通过puppetlabs.com/mcollective 了解更多信息
标签: python ruby parsing dictionary hashmap