Python 2.5中的向前兼容打印语句

4 投票
3 回答
1752 浏览
提问于 2025-04-16 19:37

好吧,也许我今天状态不太好。这看起来是很多人都会问的问题,但谷歌却没能帮我找到答案。我找到的最接近的内容是这个,但它并没有完全解决我的问题。

在工作中,我的桌面上运行的是Arch系统(默认是python 3),而公司服务器上运行的是Debian Lenny(使用的是python 2.5)。我想写一个可以在python 2和3中都能运行的脚本。这个脚本非常简单,主要就是调用git,使用的是subprocess模块。除了该死的print语句外,其他部分在两个版本的python中都能正常工作。

大家似乎都建议使用from __future__ import print_function这个方法。但是这个方法是在python 2.6中引入的,而我现在只能用2.5。

那么我还有什么选择呢?我该如何在2.5和3中使用同一个脚本调用print?我在想是不是可以用某种包装函数,但这可能不是最“pythonic”的做法。你有什么想法?而且,不,升级服务器到2.6不是一个选项。

谢谢!

3 个回答

0

这个对我来说有效:

import sys
if sys.version_info[0] == 2:
    def print_(*args):
        w = sys.stdout.write
        w( ', '.join(str(a) for a in args) )
        w( '\n' )
else:
    print_ = getattr(__builtins__, 'print')

如果你需要更全面的打印功能,使用来自 six 的 print_ 会更好。在这种情况下,

from six import print_
// replace all "print ..." by "print_(...)"
4

你为什么不直接使用日志框架呢?这个框架可以帮助你解决问题,而且比在代码中到处乱用打印语句要好得多。

5

print("hi") 这个命令在 Python 2 和 Python 3 中都能正常运行,而且在 Python 2.5 版本中不需要使用 from __future__

另外,虽然不太推荐这样做:

import sys
sys.stdout.write("hi")

撰写回答