我想使用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使用另一个字符来标记说明符的开头。
感谢您的帮助
答案 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/}