用%作为注释的文件上的python字符串插值

时间:2013-08-26 16:25:56

标签: python fabric

我想使用fabric生成自定义ejabberd配置文件并上传到服务器。 fabric在fabric.contrib.files.upload_template中使用python字符串插值。不幸的是,ejabberd配置文件使用

  

%%%

征求意见

使用python字符串插值会在以下简化示例中引发错误:

  

%%%这是评论

     

{resurl,%(resturl)s}

ValueError: unsupported format character 't' (0x74) at index 4

我可以替换%>的每个非不均匀发生。 1,偶数。 或者做

val = re.sub("%", "??", open("ejabberd.cfg").read())
val = val % {"resturl": "http://localhost:500/"}    
val.replace("??", "%")

可能有一个更好的解决方案来处理文件有%,可能是告诉python使用另一个字符来标记说明符的开头。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您需要加倍每个%

%%%%%% this is a comment

{resurl, %(resturl)s}

这逃脱了%;输出将每个%%转换回%

演示:

>>> val = '''\
... %%%%%% this is a comment
... 
... {resurl, %(resturl)s}
... '''
>>> print val % {"resturl": "http://localhost:500/"}    
%%% this is a comment

{resurl, http://localhost:500/}