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

时间:2011-06-15 16:51:58

标签: python printing stdout

好吧,也许我只是休息一天。这似乎是许多人必须要问的事情,但谷歌让我失望。我发现的最接近的是this,它并没有完全解决这个问题。

在工作中,我在我的桌面上运行Arch(默认情况下是python 3),在我公司的服务器上运行Debian Lenny(这是python 2.5)。我想编写一个可以在python 2和3中运行的单个python脚本。这是一个非常简单的脚本,对它来说并不多(主要是使用subprocess调用git)。对于该死的print语句,一切都已经在两个版本的python EXCEPT中都有效。

那里的每个人似乎都在暗示from __future__ import print_function伎俩。然而,这是在python 2.6中引入的,我坚持使用2.5。

那么我的选择是什么?如何使用相同的脚本在2.5和3中调用print?我想的可能是某种包装函数,但这可能不是最“pythonic”的做事方式。你的意见?不,将服务器升级到2.6不是一种选择。

谢谢!

3 个答案:

答案 0 :(得分:5)

print("hi")适用于py 2和3,而py 2.5中没有from __future__

或者,虽然不推荐:

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

答案 1 :(得分:4)

为什么不直接使用logging框架?它可以缓解您的问题,并且比整个代码中散布的打印语句要好得多。

答案 2 :(得分: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_(...)"