Вперед-совместимый оператор печати в Python 2.5 - PullRequest
4 голосов
/ 15 июня 2011

ОК, может быть, у меня просто выходной. Кажется, это то, о чем многие люди спрашивают, но Google ужасно подводит меня. Самым близким, что я нашел, был этот , который точно не решает эту проблему.

На работе я запускаю Arch на своем рабочем столе (по умолчанию это python 3) и Debian Lenny на серверах моей компании (это python 2.5). Я хочу написать один скрипт на python, который будет работать как на python 2, так и на 3. Это очень простой сценарий, не так много (в основном он просто вызывает git с использованием subprocess). Все уже работает в обеих версиях python, КРОМЕ для проклятых операторов print.

Кажется, все предлагают трюк from __future__ import print_function. Однако это было введено в Python 2.6, и я застрял с 2.5.

Так, каковы мои варианты? Как я могу вызвать print в 2.5 и 3, используя один и тот же скрипт? Я подумал, может быть, какая-то функция-обертка, но это может быть не самый «питонный» способ действий. Твои мысли? И нет, обновление сервера до версии 2.6 невозможно.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 15 июня 2011

print("hi") работает на py 2 и 3 без from __future__ в py 2.5

альтернативно, хотя и не рекомендуется:

import sys
sys.stdout.write("hi")
4 голосов
/ 15 июня 2011

Почему бы вам просто не использовать logging framework?Это уменьшает вашу проблему и намного лучше, чем операторы print, разбросанные по всему коду.

0 голосов
/ 26 октября 2013

Это работает для меня:

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')

Если вам нужна полнофункциональная функция печати, вам лучше использовать print_ от six . В этом случае

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