2016-12-28 96 views
0

我想输出一个我打算使用“hiera”的yaml文件。我想输出的东西,看起来像这样:不支持的格式字符'{'

--- 
top: '/tmp' 
package: 'mypackage' 
version: 1 
password: 'cubswin:)' 
make_audiobook::package_name: "%{hiera('package')}" 
make_audiobook::version: "%{hiera('version')}" 
make_audiobook::mp3filesdir: "%{hiera('top')}/%{::appname}/%{::appname}/res/raw" 
make_audiobook::app_image::app_image_url: 'http://big/long/path' 
make_audiobook::app_image::resource_path: "%{hiera('top')}/%{::appname}/%{::appname}" 
make_audiobook::app_javacode::appname:   "%{::appname}" 
make_audiobook::app_javacode::password:   "%{hiera('password')}" 
make_audiobook::app_javacode::apptitle:   "The Title of The App" 
make_audiobook::app_javacode::package:   "%{hiera('package')}" 
make_audiobook::app_javacode::path_to_code:  "%{hiera('top')}/%{::appname}/%{::appname}/src/com/%{hiera('package')}/%{::appname}" 
make_audiobook::app_javacode::path_to_androidmanifest:  "%{hiera('top')}/%{::appname}/%{::appname}" 
make_audiobook::app_javacode::version:   "%{hiera('version')}" 

所以,我想这个...

print """ 
--- 
top: '%s' 
package: '%s' 
version: %s 
password: '%s' 
make_audiobook::package_name: "%{hiera('package')}" 
make_audiobook::version: "%{hiera('version')}" 
make_audiobook::mp3filesdir: "%{hiera('top')}/%{::appname}/%{::appname}/res/raw" 
make_audiobook::app_image::app_image_url: '%s' 
make_audiobook::app_image::resource_path: "%{hiera('top')}/%{::appname}/%{::appname}" 
make_audiobook::app_javacode::appname:   "%{::appname}" 
make_audiobook::app_javacode::password:   "%{hiera('password')}" 
make_audiobook::app_javacode::apptitle:   "%s" 
make_audiobook::app_javacode::package:   "%{hiera('package')}" 
make_audiobook::app_javacode::path_to_code:  "%{hiera('top')}/%{::appname}/%{::appname}/src/com/%{hiera('package')}/%{::appname}" 
make_audiobook::app_javacode::path_to_androidmanifest:  "%{hiera('top')}/%{::appname}/%{::appname}" 
make_audiobook::app_javacode::version:   "%{hiera('version')}" 
make_audiobook::app_javacode::tracks: 
""" % (top, package, version, app_image_url, apptitle) 

但我得到这个错误:

Traceback (most recent call last): 
    File "./get_track_titles.py", line 54, in <module> 
    """ % (top, package, version, app_image_url, apptitle) 
ValueError: unsupported format character '{' (0x7b) at index 88 
+0

您可能想尝试转义'%'和'{}'字符,并且您错过了'password' – Skycc

+0

它是'%%'在格式字符串中转义'%'。 –

+1

@Skycc,'{}'不需要在这里转义。 –

回答

3

您使用Python的字符串格式,其中%字符告诉它将进行替换(替换的细节由以下字符或字符确定)。您还希望在输出中出现一些原始%字符,但%{会像您尝试进行替换一样查找Python,但%之后的字符不正确。

要使输出中出现%个字符,您需要将它们加倍以避免出现这些字符。表达式"%s %% %s" % ("foo", "bar")变成"foo % bar"