我正在尝试plistlib
使用 macOS Python 2.7 中可用的库生成 .plist 文件。
以下代码有效:
#!/usr/bin/env python
from plistlib import writePlist
patches = [
{
'Arch': 'x86_64',
'Base': 'early'
},
{
'Arch': 'x86_64',
'Base': 'late'
}
]
result = [
{
'Arch': 'x86_64',
'BundlePath': 'Alpha.kext'
},
{
'Arch': 'x86_64',
'BundlePath': 'Beta.kext'
}
]
for i in patches:
result.append(dict(i))
settings = {
'Kernel': {
'Add': result
}
}
writePlist(settings, 'config.plist')
并生成一个config.plist
包含以下内容的文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</array>
</dict>
</dict>
</plist>
但是,我config.plist
需要将patches
字典放在另一个字典中:
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
正确的配置文件必须如下所示(参见编辑器中的第 21 和 22 行):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</dict>
</array>
</dict>
</dict>
</plist>
如何编辑我的setup.py
文件以产生正确的dictionary inside dictionary
输出?如果您徘徊我为什么要拆分代码,是因为这是一种非常简化的格式,实际代码要复杂得多。因此,我需要在上述代码设计中的解决方案。谢谢您的帮助。