Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解析木偶清单_Python_String_File_Puppet - Fatal编程技术网

用Python解析木偶清单

用Python解析木偶清单,python,string,file,puppet,Python,String,File,Puppet,我的puppet模块有一个puppet清单文件-init.pp 该文件中有类的参数,在大多数情况下,它们的编写方式相同: 输入示例: class test_module( $first_param = 'test', $second_param = 'new' ) param_dict = {'first_param':'test', 'second_param':'new'} 我可以用Python解析这个文件并获得这样一个dict对象(包括所有类参数)的最佳方法是什么 示例

我的puppet模块有一个puppet清单文件-init.pp 该文件中有类的参数,在大多数情况下,它们的编写方式相同:

输入示例:

class test_module(
    $first_param = 'test',
    $second_param = 'new' )
param_dict = {'first_param':'test', 'second_param':'new'}
我可以用Python解析这个文件并获得这样一个dict对象(包括所有类参数)的最佳方法是什么

示例输出:

class test_module(
    $first_param = 'test',
    $second_param = 'new' )
param_dict = {'first_param':'test', 'second_param':'new'}
提前感谢:)

我不知道“最好”的方法是什么,但有一种方法是:

1) 设置RSpecPuppet(请参阅google或了解如何做到这一点)。 2) 编译代码并生成傀儡目录。请看帖子

现在,您编译的Puppet目录是一个JSON文档

3) 目视检查JSON文档以查找您要查找的数据。它在JSON文档中的精确位置取决于您使用的Puppet版本

4) 现在,您可以使用Python从JSON文档中将数据提取为字典。

我不知道“最佳”方法,但有一种方法是:

1) 设置RSpecPuppet(请参阅google或了解如何做到这一点)。 2) 编译代码并生成傀儡目录。请看帖子

现在,您编译的Puppet目录是一个JSON文档

3) 目视检查JSON文档以查找您要查找的数据。它在JSON文档中的精确位置取决于您使用的Puppet版本


4) 现在,您可以使用Python从JSON文档中提取数据作为字典。

您可以使用正则表达式(简单但脆弱)

您可以按如下方式使用它:

import codecs
with codecs.open(filename,'r') as ff:
     dd = parse(ff.read())

您可以使用正则表达式(简单但脆弱)

您可以按如下方式使用它:

import codecs
with codecs.open(filename,'r') as ff:
     dd = parse(ff.read())
是一个rubygem,可以安装在Puppet之上,并可以输出包含类参数、文档等列表的JSON文档

安装后(请参见上面的链接),在shell中或从Python程序中运行此命令以生成JSON:

puppet strings generate --emit-json-stdout init.pp
这将产生:

{
  "puppet_classes": [
    {
      "name": "test_module",
      "file": "init.pp",
      "line": 1,
      "docstring": {
        "text": "",
        "tags": [
          {
            "tag_name": "param",
            "text": "",
            "types": [
              "Any"
            ],
            "name": "first_param"
          },
          {
            "tag_name": "param",
            "text": "",
            "types": [
              "Any"
            ],
            "name": "second_param"
          }
        ]
      },
      "defaults": {
        "first_param": "'test'",
        "second_param": "'new'"
      },
      "source": "class test_module(\n    $first_param = 'test',\n    $second_param = 'new' ) {\n}"
    }
  ]
}
(为了简洁起见,JSON略作修剪)

您可以使用
JSON加载Python中的JSON。加载
,并从
root[“puppet\u classes”][“docstring”][“tags”]
(其中
tag\u name
param
)和
root[“puppet\u classes”][“defaults”]中提取参数名和任何默认值

是一个rubygem,可以安装在Puppet之上,并可以输出包含类参数、文档等列表的JSON文档

安装后(请参见上面的链接),在shell中或从Python程序中运行此命令以生成JSON:

puppet strings generate --emit-json-stdout init.pp
这将产生:

{
  "puppet_classes": [
    {
      "name": "test_module",
      "file": "init.pp",
      "line": 1,
      "docstring": {
        "text": "",
        "tags": [
          {
            "tag_name": "param",
            "text": "",
            "types": [
              "Any"
            ],
            "name": "first_param"
          },
          {
            "tag_name": "param",
            "text": "",
            "types": [
              "Any"
            ],
            "name": "second_param"
          }
        ]
      },
      "defaults": {
        "first_param": "'test'",
        "second_param": "'new'"
      },
      "source": "class test_module(\n    $first_param = 'test',\n    $second_param = 'new' ) {\n}"
    }
  ]
}
(为了简洁起见,JSON略作修剪)


您可以使用
JSON加载Python中的JSON。加载
,并从
root[“puppet\u classes”][“docstring”][“tags”]
(其中
tag\u name
param
)和
root[“puppet\u classes”][“defaults”]中提取参数名和任何默认值

唯一的问题是,regexp还将捕获所有其他变量,并假定赋值运算符之间有一个空格(这在99%的情况下是正确的,但仍然存在)。否则,这就很好了。好吧,这是脆弱的部分:-)别忘了忽略注释(以
#
开头的行)实际上我试过了,但没有成功。你能解释一下如何使用re或者你试着做了什么吗?你应该阅读文件的内容并为它提供函数。基本上,我们首先搜索“(‘and’”,然后在其中搜索$var=‘value’。唯一的问题是regexp还将捕获所有其他变量,并假设赋值运算符之间有一个空格(这在99%的情况下是正确的,但仍然如此)。否则,这就很好了。好吧,这是脆弱的部分:-)别忘了忽略注释(以
#
开头的行)实际上我试过了,但没有成功。你能解释一下如何使用re或者你试着做了什么吗?你应该阅读文件的内容并为它提供函数。基本上,我们首先搜索“(”和“)”,然后在其中搜索$var='value'