从 Jython 读取 YAML
Read YAML from Jython
我想知道如何从 Jython 脚本读取 YAML 文件。
我创建了一个调用 Websphere Application Server 命令的 Jython 脚本来创建多个数据源、虚拟主机、名称 space 绑定等
但是,目前值是在脚本中硬编码的,并且由于使用数组不方便,所以很多 Jython 代码是重复的。
理想情况下,我希望在外部文件中有这样的东西,由 Jython 脚本读取:
Cell
cellName: Cell01
JAAS
"alias1"
aliasName: "j2cALiasA"
aliasDesc: "First j2cAlias"
"alias2"
aliasName: "j2cALiasB"
aliasDesc: "Second j2cAlias"
Node:
nodeName: Node01
JAASAuthData:
jdbcProviderType: ...
Server
serverName: server-1
datasources
"datasource1"
datasourceName: "jdbc/datasource1"
datasourceAuthDataAlias:
然后遍历那些不同的对象(我不确定这里的 YAML 语法,但这只是为了示例)
我该怎么做? Jython 有 YAML 解析器吗?我找不到任何东西。
如果您对 WAS Admin Jython 脚本的外部化配置有其他建议,它也会很有用:)
解决方案
对于 WAS 8.5,我不得不使用我使用以下过程创建的瘦客户端切换到 Jython 2.7:http://www.ibm.com/developerworks/websphere/library/techarticles/1207_vansickel/1207_vansickel.html。
然后我不得不手动下载 PyYAML-3.11 包并编辑它的 setup.py,否则你会得到这个错误 http://pyyaml.org/ticket/163。所以我刚刚使用了这个:
def ext_status(self, ext):
return False
然后从存档中安装包:
<THIN_CLIENT_HOME>/lib/jython/bin/pip install /root/PyYAML-3.11.tar.gz
然后像这样执行 jython 脚本:
./thinClient.sh -port 9809 -host websphere-1 -f /root/yaml.py
您的数据不是真正的 YAML,缺少一些冒号和一些不必要的引号:
Cell:
cellName: Cell01
JAAS:
alias1:
aliasName: j2cALiasA
aliasDesc: First j2cAlias
alias2:
aliasName: j2cALiasB
aliasDesc: Second j2cAlias
Node:
nodeName: Node01
JAASAuthData:
jdbcProviderType: ...
Server:
serverName: server-1
datasources:
datasource1:
datasourceName: jdbc/datasource1
datasourceAuthDataAlias:
这样说,它在 Linux 上的 Jython 2.7.0 下 parses/loads 和 ruamel.yaml 是正确的(免责声明:我是该软件包的作者)。您可以使用 pip install ruamel.yaml
).
安装该软件包
我想知道如何从 Jython 脚本读取 YAML 文件。
我创建了一个调用 Websphere Application Server 命令的 Jython 脚本来创建多个数据源、虚拟主机、名称 space 绑定等
但是,目前值是在脚本中硬编码的,并且由于使用数组不方便,所以很多 Jython 代码是重复的。
理想情况下,我希望在外部文件中有这样的东西,由 Jython 脚本读取:
Cell
cellName: Cell01
JAAS
"alias1"
aliasName: "j2cALiasA"
aliasDesc: "First j2cAlias"
"alias2"
aliasName: "j2cALiasB"
aliasDesc: "Second j2cAlias"
Node:
nodeName: Node01
JAASAuthData:
jdbcProviderType: ...
Server
serverName: server-1
datasources
"datasource1"
datasourceName: "jdbc/datasource1"
datasourceAuthDataAlias:
然后遍历那些不同的对象(我不确定这里的 YAML 语法,但这只是为了示例)
我该怎么做? Jython 有 YAML 解析器吗?我找不到任何东西。
如果您对 WAS Admin Jython 脚本的外部化配置有其他建议,它也会很有用:)
解决方案
对于 WAS 8.5,我不得不使用我使用以下过程创建的瘦客户端切换到 Jython 2.7:http://www.ibm.com/developerworks/websphere/library/techarticles/1207_vansickel/1207_vansickel.html。
然后我不得不手动下载 PyYAML-3.11 包并编辑它的 setup.py,否则你会得到这个错误 http://pyyaml.org/ticket/163。所以我刚刚使用了这个:
def ext_status(self, ext):
return False
然后从存档中安装包:
<THIN_CLIENT_HOME>/lib/jython/bin/pip install /root/PyYAML-3.11.tar.gz
然后像这样执行 jython 脚本:
./thinClient.sh -port 9809 -host websphere-1 -f /root/yaml.py
您的数据不是真正的 YAML,缺少一些冒号和一些不必要的引号:
Cell:
cellName: Cell01
JAAS:
alias1:
aliasName: j2cALiasA
aliasDesc: First j2cAlias
alias2:
aliasName: j2cALiasB
aliasDesc: Second j2cAlias
Node:
nodeName: Node01
JAASAuthData:
jdbcProviderType: ...
Server:
serverName: server-1
datasources:
datasource1:
datasourceName: jdbc/datasource1
datasourceAuthDataAlias:
这样说,它在 Linux 上的 Jython 2.7.0 下 parses/loads 和 ruamel.yaml 是正确的(免责声明:我是该软件包的作者)。您可以使用 pip install ruamel.yaml
).