我一直在嘲笑pylons应用程序的以下一些肮脏的支持代码,它可以在pythonshell、单独的python文件或在paster中运行时工作。现在,我们通过mod wsgi和apache将应用程序联机,这段特定的代码完全停止工作。首先,代码本身:
def fixStyle(self, text):
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
t = t.replace('<td>', '<td style="%s">' % (STYLEDEF,))
t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
return t
这看起来很简单,说实话,确实如此。所以当我把一段文字放进去时会发生什么,例如:
^{pr2}$输出应为:
<table><tr><td style="stuff-from-styledef">Test!</td></tr></table>
在大多数系统上都是这样。但是,当我们在Apache/mod_wsgi上通过应用程序时,会发生以下情况:
^{pr2}$你猜对了。在
我把日志记录放在输出文本的开始,并在输出原始文本和t变量的末尾。它显示了我在这里展示的内容:在大多数系统上t是更改的,在apache环境中则不是这样
当然,我确保在每次更改之后重新启动apache(让它重新加载.py文件),并且它反映在日志输出中。在
我现在不知所措,不知道下一步该怎么办。谷歌搜索并不是真的有效,所以我希望你们能帮忙,也许能指出一个根本的问题,使用任何引起这种情况的东西。在
如果有遗漏,我会把它编辑进去。在
我不知道您的问题是什么,但是我发现重复
replace()
不是一件好事:如果这四个模式都在字符串中,那么将有4次创建一个新的字符串。在在我看来,这应该更好:
结果
^{pr2}$我认为
re.sub()
只对字符串执行一次替换。在用默认参数定义参数dic=>;在aux()的定义中,该值被分配给dic,然后不再改变。在每次调用时,没有从外部级别将参数传递给dic:值保存在函数内部。在
另外,函数aux()不需要在函数外搜索STYLEDEF和LINKSTYLE的值。在
所有这些都会提高执行速度。在
一。在
编辑: 由于
' style="'
和STYLEDEF对于要返回的几个结果是常见的,所以我试图缩短它们的列表,我发现为了去掉条件行,我写了前面的解决方案,我不知道为什么,我停在那里。解决方案的兴趣在于编写正则表达式字符串和断言,允许编写johnmachin的解决方案,但是我用这些oafish元组污染了它。在
还有一种解决方案:
但更清晰、更简单的解决方案是,正如John Machin所注意到的:
dic中的值仅在执行函数aux()的定义时计算。在
实际上,它非常接近
replace()
函数的参数。在添加一些打印语句并检查Apache日志:
抱歉,但是:没有提到}。在
repr()
的调试描述是不可信的。确保您正在记录repr(text)
和repr(t)
,而不是text
和{在同一数据段上运行非工作环境和至少一个工作环境,然后编辑问题以显示您使用的实际代码和实际的日志输出。在
相关问题 更多 >
编程相关推荐