Python 2.5中的向前兼容打印语句
好吧,也许我今天状态不太好。这看起来是很多人都会问的问题,但谷歌却没能帮我找到答案。我找到的最接近的内容是这个,但它并没有完全解决我的问题。
在工作中,我的桌面上运行的是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")