【发布时间】:2015-03-25 17:07:28
【问题描述】:
我不确定 Yaml 的规则是否规定必须有新行,但我对 Yaml 序列化字符串中的新行字符有疑问。这是我想要做的:
yaml.dump(my_python_dict)
返回:
"---\nasset_data:\n- {assetDefaultScenePath: 'C:\\\\data\\\\my_newfile.ma',\n assetName: new_asset}\n- {assetDefaultScenePath: 'C:\\\\assetA.ma',\n assetName: assetA.ma}\naudio_dir: ''\nbg_dir: ''\ndestination: ''\nepisode: '00'\nprod: test\n"
问题是 YAML 字符串是从 Ruby 生成的,并在到达 Python 之前通过中间脚本语言 (MEL) 传递。中间语言无法理解 Yaml 并计算所有“\n”并失败。我想知道是否有办法在没有换行符的情况下转储 Yaml?我猜这会导致加载问题。我目前没有想法,任何建议都会有所帮助。
这里是有关如何绑定的详细信息。 ruby 代码将构建一个 Windows 命令行并执行它。
"Mayabatch" -command "source \"C:/cygwin/home/workspace/bpt-maya/src/bd_lay/generate.mel\";generate(\"{SERIALIZED_DICT}\")"- SERIALIZED DICT 是需要添加 YAML 数据的地方。
- generate.mel 有一个以 SERIALIZED DICT 作为参数的 python 调用
- Mayabatch 不支持直接 Python 执行,这就是它需要被包装的原因。 由于双引号,JSON 将在此处失败,这就是我需要其他一些序列化的原因。
【问题讨论】:
-
尝试修复转储:yaml.dump(my_python_dict).replace('\n', ' ') - 但我猜这会破坏 YAML 语法,所以你真的应该修复 MEL 跨度>
-
MEL 无法处理包含新行的字符串?这听起来像是如何编写 MEL 脚本的问题。但由于需要换行符,您可以在 perl 中对 yaml 进行 base64 编码,然后在 python 中再次对其进行解码。
-
如果您删除换行符,您的 YAML 将不再解析。您可以考虑在通过您的(损坏的?)环境之前对文档进行编码(base64?)。
-
我试过 base64 但看起来字符串仍然有换行符。如果梅尔有一些原始字符串的概念,那将不是问题。有没有其他类似于 YAML 的使用单引号的编码?