【发布时间】:2009-11-04 23:36:17
【问题描述】:
我有一堆用于编码原始电子邮件的遗留代码,其中包含许多打印语句,例如
print >>f, "Content-Type: text/plain"
这对电子邮件来说很好,但我们现在使用相同的代码来输出 HTTP 请求。问题是 Python 打印语句输出 '\n' 而 HTTP 需要 '\r\n'。
看起来 Python(至少 2.6.4)为打印语句生成尾随 PRINT_NEWLINE 字节码,实现为
ceval.c:1582: err = PyFile_WriteString("\n", w);
因此,似乎没有简单的方法可以覆盖 print 的默认换行行为。我考虑了以下解决方案
.replace('\n', '\r\n')。这会干扰使用多部分编码的 HTTP 消息。.write 方法def write(self, data):
if data == '\n':
data = '\r\n'
return self._file.write(data)
print >>f, text 转换为f.write(text + line_end) 的正则表达式,其中line_end 可以是'\n' 或'\r\n'。我相信第三种选择是最合适的。听听您解决问题的 Pythonic 方法会很有趣。
【问题讨论】: