小编bro*_*hie的帖子

覆盖Python的print语句的换行符生成行为

我有一堆遗留代码用于编码包含大量打印语句的原始电子邮件,例如

print >>f, "Content-Type: text/plain"
Run Code Online (Sandbox Code Playgroud)

这对电子邮件来说都很好,但我们现在正在利用相同的代码来输出HTTP请求.问题是Python打印语句'\n'在HTTP需要时输出'\r\n'.

看起来像Python(至少2.6.4)PRINT_NEWLINE为print语句生成一个尾随字节代码,实现为

ceval.c:1582: err = PyFile_WriteString("\n", w);
Run Code Online (Sandbox Code Playgroud)

因此,似乎没有简单的方法来覆盖print的默认换行行为.我考虑过以下解决方案

  • 写完输出后,只需做一个.replace('\n', '\r\n').这将干扰使用多部分编码的HTTP消息.
  • 在目标文件对象周围创建一个包装器并代理该.write方法
  • def write(self, data):
        if data == '\n':
            data = '\r\n'
        return self._file.write(data)
    
    Run Code Online (Sandbox Code Playgroud)

  • 写的正则表达式转换print >>f, textf.write(text + line_end)哪里line_end可以'\n''\r\n'.
  • 我认为第三种选择是最合适的.听听你的Pythonic解决问题的方法会很有趣.

    python printing cpython

    8
    推荐指数
    2
    解决办法
    6647
    查看次数

    在CentOS 5上编译Python 2.4.3时,如何显式禁用_tkinter.c的编译?

    我正在尝试在编译Python 2.4.3时显式禁用_tkinter模块的编译.通过修改makefile很容易,但我只是附加一个配置选项以避免提供补丁.

    我不明白Modules/Setup*,setup.py和它们对makefile生成的贡献之间复杂的相互作用.

    python compilation tkinter

    3
    推荐指数
    1
    解决办法
    614
    查看次数

    标签 统计

    python ×2

    compilation ×1

    cpython ×1

    printing ×1

    tkinter ×1